Bench.java

/*
 * $Id: Bench.java,v 1.38 2008/07/16 08:00:37 koga Exp $
 *
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.control.util;

import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.matrix.IntMatrix;
import org.mklab.nfc.matx.MatxList;
import org.mklab.nfc.ode.DoubleDifferentialEquationSolver;
import org.mklab.nfc.ode.DoubleRungeKutta4;
import org.mklab.nfc.ode.SolverStopException;
import org.mklab.nfc.scalar.DoubleComplexNumber;
import org.mklab.nfc.util.ElapsedTimer;
import org.mklab.nfc.util.Pause;
import org.mklab.tool.control.system.DoubleSystemSolver;


/**
 * ベンチマークを行うクラス
 * 
 * @author koga
 * @version $Revision: 1.38 $
 */
public class Bench {

  /** 実数をフォーマット */
  NumberFormat fmt = new DecimalFormat("##0.00"); //$NON-NLS-1$

  /** JS5/110(MaTXの開発の初期に使用した計算機)の性能 */
  DoubleMatrix js5 = new DoubleMatrix(new double[] {3.34, 3.20, 4.74, 3.00, 4.03, 6.90});

  /** 登録されている計算機の性能 */
  @SuppressWarnings("nls")
  MatxList data = new MatxList(
      new Object[] {
          new MatxList(new Object[] {"DEC AlphaServer 8400 5/440 437MHz", "DEC Alpha 8400 5/440", new DoubleMatrix(new double[] {0.24, 0.39, 0.32, 0.40, 0.31, 0.56, 11.25})}),
          new MatxList(new Object[] {"Handmade PenII 450MHz, WinNT", "Handmade PenII 450MHz", new DoubleMatrix(new double[] {0.27, 0.27, 0.44, 0.60, 0.27, 0.49, 10.88})}),
          new MatxList(new Object[] {"DEC AlphaServer 8400 5/440 437MHz", "DEC Alpha 8400 5/440", new DoubleMatrix(new double[] {0.24, 0.39, 0.32, 0.40, 0.31, 0.56, 11.25})}),
          new MatxList(new Object[] {"Handmade PenII 450MHz, WinNT", "Handmade PenII 450MHz", new DoubleMatrix(new double[] {0.27, 0.27, 0.44, 0.60, 0.27, 0.49, 10.88})}),
          new MatxList(new Object[] {"VT-Alpha 533S/U, Alpha21164A 533MHz, Digital Unix v.4.0D", "VT-Alpah 533S/U", new DoubleMatrix(new double[] {0.42, 0.34, 0.37, 0.41, 0.39, 0.61, 9.67})}),
          new MatxList(new Object[] {"Gateway2000 GP6-400, PC100, Linux 2.0.34", "Gateway2000 GP6-400", new DoubleMatrix(new double[] {0.31, 0.30, 0.42, 0.66, 0.37, 0.57, 9.59})}),
          new MatxList(new Object[] {"SONY VAIO PCV-S720 PenIII 500MHz Win98", "SONY VAIO PCV-S720", new DoubleMatrix(new double[] {0.38, 0.38, 0.66, 0.71, 0.27, 0.49, 8.82})}),
          new MatxList(new Object[] {"Gateway GP6-450, Win95 DJGPP", "Gateway2000 GP6-450", new DoubleMatrix(new double[] {0.44, 0.44, 0.60, 0.93, 0.33, 0.49, 7.89})}),
          new MatxList(new Object[] {"Sun Ultra 2 Model 2300 (300MHz x 2)", "Sun Ultra 2 2300", new DoubleMatrix(new double[] {0.40, 0.35, 0.64, 0.47, 0.52, 0.87, 7.78})}),
          new MatxList(new Object[] {"JCC JU10/333 (UltraSPARC-IIi 333MHz), Solaris 2.6", "JCC JU10/333", new DoubleMatrix(new double[] {0.40, 0.34, 0.56, 0.43, 0.51, 1.19, 7.73})}),
          new MatxList(new Object[] {"Proside, PenII 400MHz, Win95 OSR2.1", "Proside PenII400, DJGPP", new DoubleMatrix(new double[] {0.49, 0.38, 0.77, 0.77, 0.33, 0.55, 7.72})}),
          new MatxList(new Object[] {"Iiyama V300HC, PenII 300MHz, Win95, DJGPP", "Iiyama VC300HC, DJGPP", new DoubleMatrix(new double[] {0.38, 0.38, 0.55, 0.88, 0.49, 0.71, 7.47})}),
          new MatxList(new Object[] {"MICRON Pro300 (PenPro 300MHz, Solaris x86 2.5.1)", "MICRON Pro300, Solaris", new DoubleMatrix(new double[] {0.33, 0.42, 0.51, 0.80, 0.50, 0.93, 7.37})}),
          new MatxList(new Object[] {"Gateway2000 G6-300 (Linux 2.0.30)", "Gateway2000 G6-300", new DoubleMatrix(new double[] {0.38, 0.39, 0.51, 0.96, 0.49, 0.75, 7.36})}),
          new MatxList(new Object[] {"Comsatelite PenII 333MHz (WinNT 4.0)", "PenII333 WinNT", new DoubleMatrix(new double[] {0.27, 0.36, 1.24, 1.06, 0.37, 0.83, 6.90})}),
          new MatxList(new Object[] {"SGI Origin2000 MIPS R10000 (IRIX 6.4 System V Release 4)", "SGI Origin2000 (R10000)", new DoubleMatrix(new double[] {0.54, 0.38, 0.37, 1.50, 0.87, 1.10, 5.82})}),
          new MatxList(new Object[] {"Gateway2000 G6-333 (Win95, DJGPP-2.01)", "Gateway2000 G6-333", new DoubleMatrix(new double[] {0.60, 0.55, 0.88, 1.43, 0.44, 0.66, 5.72})}),
          new MatxList(new Object[] {"Ultra10 UPA/PCI, UltraSPARC-IIi 300MHz (Solaris 2.5.1)", "Sun Ultra10 300MHz", new DoubleMatrix(new double[] {0.55, 0.38, 0.63, 0.98, 0.76, 1.31, 5.66})}),
          new MatxList(new Object[] {"Handmade PenII 233MHz, Linux 2.0.30", "Handmade PenII 233", new DoubleMatrix(new double[] {0.47, 0.60, 0.83, 1.01, 0.68, 0.97, 5.48})}),
          new MatxList(new Object[] {"Handmade Pro-200, Mem 64M, Linux 2.0.30", "Handmade Pro-200", new DoubleMatrix(new double[] {0.67, 0.89, 0.69, 1.40, 0.75, 1.14, 4.52})}),
          new MatxList(new Object[] {"MICRON Pro200, Solaris x86 2.5.1", "MICRON Pro200, Solaris", new DoubleMatrix(new double[] {0.66, 0.96, 0.70, 1.14, 0.75, 1.38, 4.48})}),
          new MatxList(new Object[] {"Gateway2000 G6-200 (Linux 2.0.3)", "Gateway2000 G6-200", new DoubleMatrix(new double[] {0.66, 1.05, 1.08, 1.47, 0.69, 1.16, 4.11})}),
          new MatxList(new Object[] {"JCC JU1/170, Solaris 2.5", "JCC JU1/170, Solaris", new DoubleMatrix(new double[] {0.76, 0.72, 1.10, 1.05, 0.89, 1.70, 4.05})}),
          new MatxList(new Object[] {"UltraSPARC 167MHz, Solaris 2.5", "SPARC Ultra167", new DoubleMatrix(new double[] {0.76, 0.69, 1.14, 1.25, 0.87, 1.55, 4.02})}),
          new MatxList(new Object[] {"Let's note CF-S21 (MMX-200MHz, Linux 2.0.34, gcc2.7.2.3)", "Let's note CF-S21", new DoubleMatrix(new double[] {0.99, 1.34, 1.90, 1.78, 0.70, 1.32, 3.17})}),
          new MatxList(new Object[] {"MICRON (Pentium 200MHz, Solaris x86 2.5.1)", "MICRON 200, Solaris", new DoubleMatrix(new double[] {0.90, 1.22, 1.60, 1.18, 1.12, 2.11, 3.09})}),
          new MatxList(new Object[] {"JCC JP4 (PowerPC604-133)", "JP4 (PowerPC604-133)", new DoubleMatrix(new double[] {1.16, 1.18, 1.09, 2.35, 0.99, 1.47, 3.06})}),
          new MatxList(new Object[] {"MMX 200MHz Linux 2.1.131-ac12, pgcc-1.1.1", "MMX200, RedHat Linux", new DoubleMatrix(new double[] {1.02, 1.33, 1.62, 1.77, 0.77, 1.72, 3.06})}),
          new MatxList(new Object[] {"Sony VAIO PCG-505EX, (Win95 OSR2, VC++)", "Sony VAIO PCG-505EX", new DoubleMatrix(new double[] {0.83, 0.98, 3.95, 2.69, 0.50, 1.37, 2.99})}),
          new MatxList(new Object[] {"Sony VAIO PCG-505EX, (Win95 OSR2, DJGPP)", "Sony VAIO PCG-505EX", new DoubleMatrix(new double[] {0.88, 1.15, 3.79, 2.52, 0.50, 1.43, 2.91})}),
          new MatxList(new Object[] {"MMX 200MHz Linux kernel 2.0.36, pgcc-1.1.1", "MMX200, RedHat Linux", new DoubleMatrix(new double[] {1.08, 1.42, 1.81, 1.82, 0.76, 1.88, 2.89})}),
          new MatxList(new Object[] {"MICRON Pro200 (PenPro 200MHz, Win95, DJGPP-2.01)", "MICRON PRo200, DJGPP", new DoubleMatrix(new double[] {1.59, 1.37, 2.47, 1.81, 0.77, 1.10, 2.83})}),
          new MatxList(new Object[] {"JCC JH20/M151 (SunOS 4.1.4)", "JCC JH20/M151, SunOS", new DoubleMatrix(new double[] {0.82, 0.99, 1.55, 4.25, 1.03, 2.36, 2.62})}),
          new MatxList(new Object[] {"Gateway2000 PG-166 (WinNT 4.0 SP3)", "Gateway2000 P5-166", new DoubleMatrix(new double[] {0.81, 1.16, 4.53, 2.04, 0.79, 2.49, 2.51})}),
          new MatxList(new Object[] {"NEWS5000X(NEWS-OS 4.2.1R)", "NEWS 5000X", new DoubleMatrix(new double[] {1.23, 1.50, 1.85, 3.05, 1.11, 1.86, 2.41})}),
          new MatxList(new Object[] {"IBM APTIVA 2176-H5F Pentium 150M, Win95, DJGPP", "IBM APTIVA 2176-H5F", new DoubleMatrix(new double[] {1.32, 1.48, 2.14, 2.25, 1.10, 2.20, 2.39})}),
          new MatxList(new Object[] {"Canon Innova 3100CX P5-133 (Linux 2.0.30)", "Canon Innova P5-133", new DoubleMatrix(new double[] {1.25, 1.68, 2.16, 2.02, 1.50, 2.11, 2.29})}),
          new MatxList(new Object[] {"JCC JP4 (PowerPC604-100)", "JP4 (PowerPC604-100)", new DoubleMatrix(new double[] {1.62, 1.63, 1.62, 2.59, 1.34, 2.38, 2.22})}),
          new MatxList(new Object[] {"Gateway Solo P5-133 (Linux 2.0.30)", "Gateway Solo P5-133", new DoubleMatrix(new double[] {1.46, 1.90, 2.21, 2.59, 1.50, 2.39, 2.05})}),
          new MatxList(new Object[] {"Let's NOTE 133 MHz, Mem 32M, (Linux 2.0.30)", "Let's NOTE 133, Linux", new DoubleMatrix(new double[] {1.29, 2.18, 2.31, 3.19, 1.22, 2.35, 2.04})}),
          new MatxList(new Object[] {"SparcStation2 + TurboSparc 170MHz, SunOS 4.1.4", "TurboSparc 170MHz", new DoubleMatrix(new double[] {1.16, 1.42, 1.81, 5.47, 1.13, 3.30, 2.03})}),
          new MatxList(new Object[] {"Gateway2000 P5-120 (Solaris x86 2.5.1)", "Gateway2000 P5-120", new DoubleMatrix(new double[] {1.49, 1.95, 2.43, 2.27, 1.45, 2.94, 1.99})}),
          new MatxList(new Object[] {"ThinkPad 535 120 MHz (FreeBSD 2.2.2-R)", "ThinkPad 535 120 MHz", new DoubleMatrix(new double[] {1.59, 2.13, 2.81, 2.48, 1.54, 4.49, 1.72})}),
          new MatxList(new Object[] {"SPARC station 10 Model 60 (Solaris 2.6)", "SPARC staion 10 M60", new DoubleMatrix(new double[] {1.58, 1.79, 2.87, 3.49, 1.94, 4.01, 1.64})}),
          new MatxList(new Object[] {"Gateway2000 P5-100 (FreeBSD 2.2.7-R)", "Gateway2000 P5-100", new DoubleMatrix(new double[] {2.08, 2.22, 3.28, 2.23, 1.87, 4.92, 1.54})}),
          new MatxList(new Object[] {"Gateway2000 P5-90 (Linux 2.0.30)", "Gateway2000 P5-90", new DoubleMatrix(new double[] {1.93, 3.32, 3.51, 3.98, 1.77, 3.46, 1.41})}),
          new MatxList(new Object[] {"JS5/110 (Micro SPARC 110MHz, SunOS 4.1.4)", "JCC JS5/110, SunOS", new DoubleMatrix(new double[] {2.31, 2.16, 3.11, 2.42, 3.13, 5.79, 1.36})}),
          new MatxList(new Object[] {"Macintosh G3 MT 333, Mem 384M, Mac OS 8.5 (Soft Win98)", "Macintosh G3 MT 333", new DoubleMatrix(new double[] {3.29, 2.85, 6.27, 2.53, 2.25, 3.57, 1.23})}),
          new MatxList(new Object[] {"Gateway2000 P5-100 (WinNT-4.0, DJGPP-2.01)", "Gateway2000 P5-100", new DoubleMatrix(new double[] {3.08, 2.36, 3.57, 4.29, 2.97, 4.34, 1.20})}),
          new MatxList(new Object[] {"Mebius Note 590CD-95 (Win98, DJGPP-2.01)", "Mebius 590-95(DJGPP)", new DoubleMatrix(new double[] {3.13, 3.41, 4.73, 5.16, 2.38, 4.62, 1.07})}),
          new MatxList(new Object[] {"Mebius Note 575CD-95 (DOS 6.3, DJGPP-2.01)", "Mebius 575-95(DJGPP)", new DoubleMatrix(new double[] {2.64, 3.24, 4.84, 3.74, 3.02, 6.10, 1.07})}),
          new MatxList(new Object[] {"Mebius Note 575CD-95 (LINUX 2.0.30)", "Mebius 575-95(Linux)", new DoubleMatrix(new double[] {2.25, 3.39, 4.51, 4.48, 3.71, 6.34, 1.03})}),
          new MatxList(new Object[] {"Gateway2000 P5-60 (Solaris x86 2.5.1)", "Gateway2000 P5-60", new DoubleMatrix(new double[] {2.57, 3.88, 4.98, 4.31, 2.95, 6.21, 1.01})}),
          new MatxList(new Object[] {"JS5/70 (Micro SPARC 70MHz, SunOS 4.1.4)", "JCC JS5/70, SunOS", new DoubleMatrix(new double[] {3.34, 3.20, 4.74, 3.00, 4.03, 6.90, 1.00})}),
          new MatxList(new Object[] {"Akia Tordade509, Pentium 90MHz,(Win95)", "Akia Tordade509", new DoubleMatrix(new double[] {2.96, 3.19, 8.74, 7.91, 1.48, 5.27, 0.97})}),
          new MatxList(new Object[] {"SPARC station 10 Model 30 (SunOS 4.1.3)", "SPARC staion 10 M30", new DoubleMatrix(new double[] {3.43, 3.74, 5.52, 3.31, 3.37, 6.61, 0.97})}),
          new MatxList(new Object[] {"SPARC station IPX + Weitek (SunOS 4.1.4)", "SPARC IPX + Weitek", new DoubleMatrix(new double[] {5.10, 5.38, 6.40, 7.06, 3.20, 8.63, 0.71})}),
          new MatxList(new Object[] {"SPARC station IPX (SunOS 4.1.4)", "SPARC staion IPX", new DoubleMatrix(new double[] {7.45, 7.60, 11.31, 7.48, 5.66, 10.95, 0.49})}),
          new MatxList(new Object[] {"SPARC station 2 (SunOS 4.1.3)", "SPARC staion 2", new DoubleMatrix(new double[] {7.29, 7.52, 11.54, 7.71, 5.95, 10.26, 0.49})}),
          new MatxList(new Object[] {"SPARC Classic (SunOS 4.1.4)", "SPARC Classic", new DoubleMatrix(new double[] {8.10, 7.82, 12.28, 4.98, 6.33, 18.39, 0.46})}),
          new MatxList(new Object[] {"JCC Classic (SunOS 4.1.4)", "JCC Classic, SunOS", new DoubleMatrix(new double[] {8.13, 7.90, 12.52, 5.54, 7.69, 18.72, 0.43})}),
          new MatxList(new Object[] {"SPARC station IPC (SunOS 4.1.3)", "SPARC station IPC", new DoubleMatrix(new double[] {14.32, 15.50, 24.37, 10.93, 9.93, 17.70, 0.27})}),
          new MatxList(new Object[] {"SPARC station 1 (SunOS 4.1.4)", "SPARC station 1", new DoubleMatrix(new double[] {17.25, 18.75, 29.46, 13.11, 11.44, 19.98, 0.23})}),
          new MatxList(new Object[] {"Handmade PC AMD K6-2-450(450MHz), Mem 128M, Win95/MaTX-DJ", "AMD K6-2-450, DJGPP", new DoubleMatrix(new double[] {0.38, 0.38, 0.66, 1.32, 0.27, 0.55, 7.76})}),
          new MatxList(new Object[] {"Handmade PC AMD K6-2-450(500MHz), Mem 128M, Win95/MaTX-DJ", "AMD K6-2-500, DJGPP", new DoubleMatrix(new double[] {0.38, 0.38, 0.55, 1.26, 0.27, 0.49, 8.19})}),
          new MatxList(new Object[] {"Handmade PC Rise mP6-266(200MHz), Mem 128M, Win95/MaTX-DJ", "Rise mP6-266, DJGPP", new DoubleMatrix(new double[] {0.71, 0.82, 1.48, 1.15, 0.82, 1.43, 3.91})}),
          new MatxList(new Object[] {"HandMade Celeron 300A(450MHz), WinNT/MaTX-VC", "Celeron-450, WinNT", new DoubleMatrix(new double[] {0.33, 0.40, 0.84, 0.51, 0.25, 0.53, 9.08})}),
          new MatxList(new Object[] {"Gateway 2000 P5-166, Linux 2.0.34 (Debian JP)", "P5-166, Linux", new DoubleMatrix(new double[] {1.21, 1.62, 2.41, 1.92, 1.28, 2.64, 2.27})}),
          new MatxList(new Object[] {"SPARC SUNW,Ultra-60, SunOS5.5.1", "SPARC Ultra-60", new DoubleMatrix(new double[] {0.33, 0.29, 0.51, 0.39, 0.44, 1.04, 8.86})}),
          new MatxList(new Object[] {"Handmade PenIII 500MHz WinNT sp4 ", "PenIII 500, WinNT", new DoubleMatrix(new double[] {0.22, 0.27, 0.38, 0.55, 0.27, 0.44, 11.83})}),
          new MatxList(new Object[] {"Thinkpad 1456, Celeron 366MHz, Mem 128M, Vine 1.1+2.2.8", "Thinkpad 1456, Linux", new DoubleMatrix(new double[] {0.66, 0.79, 0.66, 1.62, 0.43, 0.73, 5.40})}),
          new MatxList(new Object[] {"DELL, PenIII 550MHz, Solaris7 x86", "DELL550, Solaris7", new DoubleMatrix(new double[] {0.18, 0.25, 0.28, 0.55, 0.29, 0.69, 12.04})}),
          new MatxList(new Object[] {"DELL, PenIII 550MHz, Linux 2.2.9 (TurboLinux4.0)", "DELL550, Linux2.2.9", new DoubleMatrix(new double[] {0.20, 0.27, 0.39, 0.57, 0.28, 0.57, 11.41})}),
          new MatxList(new Object[] {"P2B-VM 8M, PenIII 550MHz, WinNT4.0(SP5)", "PenIII550, WinNT4.0", new DoubleMatrix(new double[] {0.13, 0.22, 0.72, 0.56, 0.23, 0.50, 12.12})}),
          new MatxList(new Object[] {"Handmade PenIII Xeon 550MHz Dual, Solaris7 x86", "Xeon550, Solaris7", new DoubleMatrix(new double[] {0.17, 0.20, 0.26, 0.49, 0.30, 0.67, 13.01})}),
          new MatxList(new Object[] {"Let's note CF-A77J8, Celeron 300MHz, Vine 1.1", "Let's A77, Linux", new DoubleMatrix(new double[] {0.69, 0.95, 0.56, 1.03, 0.53, 1.07, 5.20})}),
          new MatxList(new Object[] {"Compaq AlphaServer DS20 Alpha 500MHz, Tru64-Unix 4.0F", "Compaq500, Tru64-Unix", new DoubleMatrix(new double[] {0.10, 0.14, 0.14, 0.30, 0.20, 0.37, 21.39})}),
          new MatxList(new Object[] {"DELL XPS T450, PenIII 450MHz, Vine 1.1", "DEL T450, Linux", new DoubleMatrix(new double[] {0.28, 0.33, 0.36, 0.72, 0.35, 0.77, 9.32})}),
          new MatxList(new Object[] {"Let's note CF-M1V, Celeron 333MHz, Laser5 6.0", "Let's CF-M1V, Linux", new DoubleMatrix(new double[] {0.65, 0.94, 0.52, 1.12, 0.48, 1.04, 5.36})}),
          new MatxList(new Object[] {"Let's note CF-M1R, PenIII 400MHz, Solaris 7 x86", "Let's CF-M1R, Solaris", new DoubleMatrix(new double[] {0.37, 0.56, 0.37, 0.54, 0.44, 0.94, 7.92})}),
          new MatxList(new Object[] {"Let's note CF-M1R, PenIII 400MHz, Win98/MaTX-DJ", "Let's CF-M1R, DJGPP", new DoubleMatrix(new double[] {0.44, 0.60, 0.33, 0.49, 0.44, 0.71, 8.23})}),
          new MatxList(new Object[] {"Handmade AMD K6-III-450, Win98/MaTX-DJ", "AMD K6-III-450, DJGPP", new DoubleMatrix(new double[] {0.27, 0.38, 0.60, 0.99, 0.38, 0.49, 8.40})}),
          new MatxList(new Object[] {"Handmade AMD K6-III-450, Win98/MaTX-VC", "AMD K6-III-450, VC++", new DoubleMatrix(new double[] {0.33, 0.50, 1.10, 1.15, 0.27, 0.71, 6.88})}),
          new MatxList(new Object[] {"ASUS P3B-F PenIII 600MHz, Win98SE/MaTX-VC6", "ASUS P3B-F, VC++", new DoubleMatrix(new double[] {0.55, 0.22, 0.55, 0.66, 0.22, 0.61, 9.46})}),
          new MatxList(new Object[] {"NEC VersaPro NX VA40D(PenII 400MHz), TurboLinux4.2", "VersaPro NX VA40D, Linux", new DoubleMatrix(new double[] {0.39, 0.78, 0.45, 0.94, 0.38, 0.76, 6.96})}),
          new MatxList(new Object[] {"NEC VersaPro NX VA40D(PenII 400MHz), Win98/MaTX-VC6", "VersaPro NX VA40D, VC++", new DoubleMatrix(new double[] {0.93, 0.60, 0.88, 1.21, 0.33, 0.88, 5.39})}),
          new MatxList(new Object[] {"VT-Alpha 667 (21264 667MHz), True64 Unix V4.0", "VT-Alpha 667", new DoubleMatrix(new double[] {0.09, 0.14, 0.12, 0.26, 0.15, 0.33, 24.47})}),
          new MatxList(new Object[] {"DELL DIMENSION V400, Mem 256M, Win98/MaTX-VC5", "DELL V400", new DoubleMatrix(new double[] {0.28, 0.33, 0.93, 0.82, 0.33, 0.94, 7.60})}),
          new MatxList(new Object[] {"SONY PCG-Z505N_BP(J), DJGPP", "PCG-Z505N_BP", new DoubleMatrix(new double[] {0.44, 0.49, 0.27, 1.04, 0.38, 0.66, 8.03})}),
          new MatxList(new Object[] {"EPSON TC500M, Celeron 500MHz, Vine 1.1", "EPSON TC500M", new DoubleMatrix(new double[] {0.51, 0.58, 0.35, 0.73, 0.32, 0.67, 7.99})}),
          new MatxList(new Object[] {"DELL DIMENSION V400, Mem 256M, Win2000", "DELL V400, Win2000", new DoubleMatrix(new double[] {0.28, 0.33, 0.93, 0.82, 0.33, 0.94, 7.60})}),
          new MatxList(new Object[] {"DELL DIMENSION V400, Mem 256M, Laser5 6.0R2", "DELL V400, Linux", new DoubleMatrix(new double[] {0.28, 0.39, 0.45, 0.61, 0.37, 0.76, 8.91})}),
          new MatxList(new Object[] {"Sharp PC-PJ2-X4, PenII 333MHz, Mem 128M, Win98/MaTX-DJ", "PC-PJ2-X4, DJGPP", new DoubleMatrix(new double[] {0.49, 0.66, 0.44, 0.71, 0.49, 0.93, 6.69})}),
          new MatxList(new Object[] {"SHARP MN-450-H23, Linux 2.2.13, egcs-2.91.66", "MN-450-H23, Linux", new DoubleMatrix(new double[] {0.58, 0.75, 0.83, 1.36, 0.67, 1.42, 4.56})}),
          new MatxList(new Object[] {"Gateway PenIII 700, Linux 2.2.13, egcs-2.91.66", "Gateway PenIII 700", new DoubleMatrix(new double[] {0.31, 0.42, 0.22, 0.52, 0.22, 0.41, 12.10})}),
          new MatxList(new Object[] {"Gateway GP7-450, Win98, VC++", "Gateway GP7-450", new DoubleMatrix(new double[] {0.22, 0.27, 0.99, 0.82, 0.27, 0.88, 8.47})}),
          new MatxList(new Object[] {"COMPAQ PRESARIO 1919 (Celeron 300MHz), Win98", "COMPAQ PRESARIO 1919", new DoubleMatrix(new double[] {1.10, 1.21, 1.81, 1.27, 0.44, 1.21, 3.71})}),
          new MatxList(new Object[] {"IBM ThinkPad 560E, Win95/MaTX-VC", "ThinkPad 560E", new DoubleMatrix(new double[] {1.21, 1.60, 4.55, 2.47, 0.72, 2.14, 2.24})}),
          new MatxList(new Object[] {"Sun Enterprise 450 (Ultra Sparc 400MHz) Solaris 7", "Sun Enterprise 450", new DoubleMatrix(new double[] {0.30, 0.26, 0.46, 0.37, 0.42, 0.98, 9.58})}),
          new MatxList(new Object[] {"Micron Millennia Pro2 Plus, Win95/MaTX-VC6", "Micron Millennia", new DoubleMatrix(new double[] {0.72, 1.26, 2.91, 2.64, 0.66, 1.81, 2.82})}),
          new MatxList(new Object[] {"DELL, PenIII 450MHz, FreeBSD 3.4-Release", "DELL FreeBSD", new DoubleMatrix(new double[] {0.25, 0.28, 0.46, 0.51, 0.38, 0.91, 9.55})}),
          new MatxList(new Object[] {"Dell Inspiron3200, Memory 80Mb, Win98", "DELL Win98", new DoubleMatrix(new double[] {0.66, 0.55, 1.53, 1.32, 0.55, 1.54, 4.35})}), //$NON-NLS-1$ 
          new MatxList(new Object[] {"Handmade (PenIII Xeon 500MHz), Linux Laser5 Rel.2", "Xeon 500MHz, Linux", new DoubleMatrix(new double[] {0.19, 0.24, 0.35, 0.71, 0.28, 0.61, 11.78})}),
          new MatxList(new Object[] {"Handmade (PenIII Xeon 500MHz), WinNT-4.0", "Xeon 500MHz, WinNT", new DoubleMatrix(new double[] {0.11, 0.16, 0.27, 0.60, 0.33, 0.71, 13.47})}),
          new MatxList(new Object[] {"SOTEC WINBOOK EAGLE/X", "SOTEC WINBOOK", new DoubleMatrix(new double[] {0.60, 0.93, 0.49, 0.93, 0.60, 1.04, 5.43})}),
          new MatxList(new Object[] {"FUJITSU FMV 6500DX4, Vine 2.0CR", "FMV 6500DX4", new DoubleMatrix(new double[] {0.20, 0.28, 0.38, 0.59, 0.29, 0.71, 10.85})}),
          new MatxList(new Object[] {"DELL Optiplex GXMT 5166, Vine 2.0CR", "DELL 5166", new DoubleMatrix(new double[] {1.49, 1.58, 2.25, 2.42, 1.98, 6.39, 1.72})}),
          new MatxList(new Object[] {"DELL Optiplex XMT 5133, Vine 2.0CR", "DELL 5133", new DoubleMatrix(new double[] {1.60, 2.62, 2.85, 3.66, 1.84, 4.57, 1.50})}),
          new MatxList(new Object[] {"Gateway 2000 P5-133, Vine 2.0CR", "Gateway P5-133", new DoubleMatrix(new double[] {1.54, 2.03, 2.45, 2.33, 1.62, 4.18, 1.81})}),
          new MatxList(new Object[] {"Akia MicroBook Giga GM301/86-DR, Vine 2.0", "Akia GM301/86", new DoubleMatrix(new double[] {0.38, 0.40, 0.20, 1.01, 0.17, 0.35, 11.50})}),
          new MatxList(new Object[] {"Akia MicroBook Giga GM301/86-DR, Win98/MaTX-VC6", "Akia GM301/86", new DoubleMatrix(new double[] {0.82, 0.66, 0.38, 1.10, 0.17, 0.38, 8.13})}),
          new MatxList(new Object[] {"Handmade, AMD Athlon 700MHz, 128MSDRAM, Win98/MaTX-DJ", "Athlon 700MHz", new DoubleMatrix(new double[] {0.16, 0.11, 0.22, 0.82, 0.16, 0.33, 16.95})}),
          new MatxList(new Object[] {"Handmade, AMD Athlon 800MHz, 128MSDRAM, Win98/MaTX-DJ", "Athlon 800MHz, Win98", new DoubleMatrix(new double[] {0.11, 0.11, 0.16, 0.71, 0.16, 0.27, 20.08})}),
          new MatxList(new Object[] {"Handmade, AMD Athlon 800MHz, 128MSDRAM, Win98/MaTX-VC6", "Athlon 800MHz, Win98", new DoubleMatrix(new double[] {0.72, 0.16, 0.50, 0.77, 0.11, 0.39, 11.42})}),
          new MatxList(new Object[] {"FMV-DESKPOWER T20, 96MB, Win95/MaTX-DJ", "FMV T20, Win95", new DoubleMatrix(new double[] {1.15, 1.59, 2.09, 1.76, 1.48, 5.99, 2.03})}),
          new MatxList(new Object[] {"FMV-6300T7A, PenII 300MHz, 128MB, WinNT-4.0/MaTX-DJ", "FMV-6300T7A, WinNT", new DoubleMatrix(new double[] {0.33, 0.38, 0.49, 0.99, 0.55, 1.37, 6.70})}),
          new MatxList(new Object[] {"Handmade AMD Athlon 650MHz, 256MBSDRAM, Win2000", "Athlon 650MHz, Win2000", new DoubleMatrix(new double[] {0.18, 0.12, 0.51, 0.83, 0.15, 0.43, 13.87})}),
          new MatxList(new Object[] {"GRANPOWER5000 model 380, 256MB, PenIII 600MHz, WinNT-4.0/MaTX-DJ", "GRANPOWER5000, WinNT",
              new DoubleMatrix(new double[] {0.44, 0.49, 0.22, 0.77, 0.27, 0.55, 9.56})}),
          new MatxList(new Object[] {"Handmade PenIII Xeon 550MHz Dual, Solaris7 x86 + lxrun", "Xeon550, lxrun", new DoubleMatrix(new double[] {0.17, 0.22, 0.32, 0.53, 0.27, 0.53, 12.92})}),
          new MatxList(new Object[] {"FMV-6200T5 (PenPro 200MHz, 96MB, FreeBSD 2.2.8R)", "FMV-6200T5, FreeBSD", new DoubleMatrix(new double[] {0.76, 1.05, 1.48, 1.21, 0.83, 2.13, 3.45})}),
          new MatxList(new Object[] {"GRANPOWER5000 model270S, PenII 266MHz, 192MB, Redhat Linux 5.2)", "GRANPOWER5000", new DoubleMatrix(new double[] {0.43, 0.60, 0.73, 1.27, 0.59, 1.38, 5.28})}),
          new MatxList(new Object[] {"ThinkPad 235 (MMX Pentium 233MHz), Win98/MaTX-DJ", "ThinkPad 235", new DoubleMatrix(new double[] {0.71, 1.54, 1.54, 3.08, 0.77, 2.25, 2.79})}),
          new MatxList(new Object[] {"DELL Inspiron 5000, Mobile Celeron 500MHz, Win98SE/MaTX-VC6", "Inspiron 5000", new DoubleMatrix(new double[] {0.44, 0.44, 0.94, 0.72, 0.27, 0.66, 7.52})}),
          new MatxList(new Object[] {"DELL Inspiron 2000, Mobile PenIII 400MHz, Win2000/MaTX-VC6", "Inspiron 2000", new DoubleMatrix(new double[] {0.99, 0.39, 0.88, 0.66, 0.33, 0.77, 6.48})}),
          new MatxList(new Object[] {"Sun Ultra30 creator 3D, Solaris 2.6", "Ultra30", new DoubleMatrix(new double[] {0.43, 0.40, 0.62, 0.60, 0.53, 1.34, 6.73})}),
          new MatxList(new Object[] {"Sun Ultra1 creator 3D, Solaris 2.6", "Ultra1", new DoubleMatrix(new double[] {0.69, 0.61, 1.08, 1.00, 0.95, 2.45, 3.98})}),
          new MatxList(new Object[] {"Sun SPARC Station 20, Solaris 2.6", "SPARC Station 20", new DoubleMatrix(new double[] {1.42, 1.73, 2.75, 3.32, 2.15, 7.53, 1.51})}),
          new MatxList(new Object[] {"Dual PenIII 733MHz NT4 VC6", "Dual PenIII 733", new DoubleMatrix(new double[] {0.31, 0.33, 0.44, 0.44, 0.17, 0.42, 11.99})}),
          new MatxList(new Object[] {"Dual PenIII 650MHz Vine Linux 2.0CR", "Dual PenIII 650", new DoubleMatrix(new double[] {0.27, 0.50, 0.23, 0.58, 0.22, 0.47, 11.46})}),
          new MatxList(new Object[] {"Fujitsu Biblo MC3/45, Celeron 450MHz, 128MB, Win98SE/MaTX-DJ", "Biblo MC3/45", new DoubleMatrix(new double[] {0.33, 0.55, 0.33, 0.55, 0.38, 0.71, 8.81})}),
          new MatxList(new Object[] {"Let's note CF-A77, Celron 300MHz, Win98/MaTX-BC", "Let's CF-A77, BCC", new DoubleMatrix(new double[] {0.88, 1.07, 0.81, 1.49, 0.52, 1.21, 4.26})}),
          new MatxList(new Object[] {"AMD Athlon 950MHz, Melco VS-S(100M), Win95/MaTX-DJ", "AMD 950MHz(100M)", new DoubleMatrix(new double[] {0.11, 0.11, 0.11, 0.77, 0.16, 0.27, 22.71})}),
          new MatxList(new Object[] {"AMD Athlon 950MHz, Melco VS-S(133M), Win95/MaTX-DJ", "AMD 950MHz(133M)", new DoubleMatrix(new double[] {0.11, 0.11, 0.11, 0.55, 0.11, 0.27, 24.02})}),
          new MatxList(new Object[] {"AMD K6-2+ 500MHz, 128MSDRAM(PC100), Win95/MaTX-DJ", "AMD K6-2+ 500MHz", new DoubleMatrix(new double[] {0.27, 0.38, 0.55, 1.70, 0.27, 0.49, 8.25})}),
          new MatxList(new Object[] {"Let's note CF-S22(MMX-Pentium 266MHz, Win98/MaTX-DJ)", "CF-S22", new DoubleMatrix(new double[] {0.77, 0.99, 1.32, 1.48, 0.77, 1.48, 3.68})}),
          new MatxList(new Object[] {"Handmade PenIII (802.93-MHz) Dual, FreeBSD 4.2R", "Handmade, PenIII 800", new DoubleMatrix(new double[] {0.33, 0.43, 0.17, 0.54, 0.20, 0.51, 12.15})}),
          new MatxList(new Object[] {"Handmade PenIII 600MHz Dual, WinNT-4.0/MaTX-VC6", "Handmade, PenIII 600", new DoubleMatrix(new double[] {0.39, 0.50, 0.58, 0.66, 0.20, 0.58, 8.86})}),
          new MatxList(new Object[] {"Handmade PenIII 800MHz, WinNT-4.0/MaTX-VC6", "Handmade, PenIII 800", new DoubleMatrix(new double[] {0.25, 0.43, 0.58, 0.45, 0.15, 0.74, 10.50})}),
          new MatxList(new Object[] {"DELL Precision420 PenIII 933MHz, WinNT-4.0/MaTX-VC6", "DELL PenIII 933", new DoubleMatrix(new double[] {0.23, 0.28, 0.36, 0.34, 0.13, 0.39, 14.84})}),
          new MatxList(new Object[] {"BTC, Celeron 500MHz, Win98SE, DJGPP", "Celeron 500, DJGPP", new DoubleMatrix(new double[] {0.66, 1.32, 0.38, 1.81, 0.33, 0.71, 5.56})}),
          new MatxList(new Object[] {"BTC, Celeron 500MHz, TurboLinux Workstation 6.0", "Celeron 500, Linux", new DoubleMatrix(new double[] {1.08, 1.85, 0.51, 2.78, 0.29, 0.62, 4.49})}),
          new MatxList(new Object[] {"Dell OptiPlex GX1P, PenIII 500MHz, Win98/MaTX-DJ", "Dell GX1P, DJGPP", new DoubleMatrix(new double[] {0.16, 0.27, 0.33, 0.77, 0.33, 0.71, 10.77})}),
          new MatxList(new Object[] {"Dell OptiPlex GX150, PenIII 1GHz, Vine 2.1/egcs-2.91.66", "Dell OptiPlex GX150", new DoubleMatrix(new double[] {0.23, 0.28, 0.19, 0.58, 0.14, 0.30, 15.56})}),
          new MatxList(new Object[] {"DELL Precision 620, PenIII 1GHz Dual, Vine 2.1/egcs-2.91.66", "DELL Precision 620", new DoubleMatrix(new double[] {0.24, 0.26, 0.13, 0.32, 0.13, 0.31, 18.52})}),
          new MatxList(new Object[] {"Let's note CF-S51, PenII 333MHz, Vine Linux 2.1", "Let's note CF-S51", new DoubleMatrix(new double[] {0.61, 0.55, 0.41, 0.91, 0.42, 0.95, 6.63})}),
          new MatxList(new Object[] {"Compaq Alpha Server ES40 (3CPU), Digital UNIX V5.0 (Rev. 910)", "Alpha ES40", new DoubleMatrix(new double[] {0.07, 0.13, 0.13, 0.30, 0.21, 0.54, 21.63})}),
          new MatxList(new Object[] {"Handmade Celeron 700MHz, Vine Linux 2.0CR", "Celeron 700", new DoubleMatrix(new double[] {0.43, 0.55, 0.25, 0.63, 0.20, 0.46, 10.36})}),
          new MatxList(new Object[] {"SunBlade 100, Ultra Sparc IIe 500MHz 128MB, Solaris 8/gcc-2.95.3", "SunBlade 100", new DoubleMatrix(new double[] {0.30, 0.30, 0.27, 0.86, 0.33, 0.92, 9.34})}),
          new MatxList(new Object[] {"Handmade, PenIII 1.1GHz, Win98 MaTX-VC", "PenIII 1.1G, Win98", new DoubleMatrix(new double[] {0.16, 0.33, 0.11, 0.60, 0.16, 0.33, 16.68})}),
          new MatxList(new Object[] {"Dell INSPIRON 5000e, PenIII 850MHz, Vine Linux 2.1.5", "Dell INSPIRON 5000e", new DoubleMatrix(new double[] {0.26, 0.39, 0.16, 0.58, 0.16, 0.36, 14.08})}),
          new MatxList(new Object[] {"CASSIOPEIA FIVA, MediaGX233, Win98SE/MaTX-DJ", "CASSIOPEIA FIVA", new DoubleMatrix(new double[] {1.43, 2.20, 3.35, 2.31, 1.59, 5.16, 1.66})}),
          new MatxList(new Object[] {"CASSIOPEIA FIVA, MediaGX(LOW), Win98SE/MaTX-DJ", "CASSIOPEIA FIVA", new DoubleMatrix(new double[] {3.68, 5.88, 8.30, 4.01, 3.63, 13.13, 0.71})}),
          new MatxList(new Object[] {"iiyama VP933DS, PenIII 933MHz, Win98SE/MaTX-DJ", "iiyama VP933DS", new DoubleMatrix(new double[] {0.27, 0.44, 0.16, 0.66, 0.16, 0.38, 13.11})}),
          new MatxList(new Object[] {"CASSIOPEIA FIVA MPC-206, Crusoe TM-5600 300MHz, WinME/MaTX-DJ", "CASSIOPEIA FIVA MPC-206",
              new DoubleMatrix(new double[] {0.55, 0.82, 1.10, 1.32, 0.82, 1.43, 4.20})}),
          new MatxList(new Object[] {"CASSIOPEIA FIVA MPC-206, Crusoe TM-5600 600MHz, WinME/MaTX-DJ", "CASSIOPEIA FIVA MPC-206",
              new DoubleMatrix(new double[] {0.22, 0.38, 0.38, 1.26, 0.38, 0.71, 8.49})}),
          new MatxList(new Object[] {"ThinkPad i 1124-93J, PenIII 500MHz (Battery) WinME/MaTX-DJ", "ThinkPad i 1124-93J", new DoubleMatrix(new double[] {0.43, 0.60, 0.44, 0.99, 0.60, 1.15, 6.12})}),
          new MatxList(
              new Object[] {"ThinkPad i 1124-93J, PenIII 500MHz  (AC adapter) WinME/MaTX-DJ", "ThinkPad i 1124-93J", new DoubleMatrix(new double[] {0.38, 0.38, 0.27, 0.66, 0.33, 0.71, 9.35})}),
          new MatxList(new Object[] {"Dell Inspiron8000, PenIII 750MHz, WindME-SR1/MaTX-VC6", "Dell Inspiron8000", new DoubleMatrix(new double[] {0.83, 0.38, 0.49, 0.55, 0.16, 0.44, 9.44})}),
          new MatxList(new Object[] {"Athlon 1.33GHz DDRSDRAM, Win98/MaTX-DJ", "Athlon 1.33GHz", new DoubleMatrix(new double[] {0.11, 0.05, 0.05, 0.44, 0.11, 0.16, 34.20})}),
          new MatxList(new Object[] {"iMac 233MHz, LinuxPPC 2000 Q4", "iMac LinuxPPC", new DoubleMatrix(new double[] {0.60, 0.59, 0.84, 1.08, 0.55, 0.96, 5.40})}),
          new MatxList(new Object[] {"PowerMac G4 450MHz, 512Mbyte, LinuxPPC 2000 Q4", "PowerMac G4 450MHz", new DoubleMatrix(new double[] {0.22, 0.21, 0.36, 0.65, 0.38, 0.51, 11.83})}),
          new MatxList(new Object[] {"Handmade, AMD Duron 650MHz, Win95/MaTX-DJ", "Duron 650MHz", new DoubleMatrix(new double[] {0.38, 0.44, 0.22, 0.88, 0.22, 0.44, 10.50})}),
          new MatxList(new Object[] {"Handmade, AMD AthlonMP 1.2GHz, Win95/MaTX-DJ", "AthlonMP 1.2GHz", new DoubleMatrix(new double[] {0.11, 0.11, 0.06, 0.44, 0.11, 0.22, 29.04})}),
          new MatxList(new Object[] {"Handmade, AMD Athlon XP 1700+ 1.47GHz, Win95/MaTX-DJ", "Athlon XP 1.47GHz", new DoubleMatrix(new double[] {0.05, 0.05, 0.05, 0.38, 0.05, 0.22, 42.00})}),
          new MatxList(new Object[] {"Handmade PenIII 1GHz Dual, Vine Linux 2.0CR", "PenIII 1G Dual", new DoubleMatrix(new double[] {0.25, 0.35, 0.16, 0.53, 0.15, 0.34, 14.95})}),
          new MatxList(new Object[] {"Gateway GP6-550, Intel PenIII 550MHz, Win2000/MaTX-VC", "Gateway GP6-550", new DoubleMatrix(new double[] {0.14, 0.27, 0.69, 0.52, 0.26, 0.83, 10.62})}),
          new MatxList(new Object[] {"Sony Vaio PCG-GR9/K, PenIII-M 1.13 GHz, Vine Linux 2.1.5", "Sony Vaio PCG-GR9/K", new DoubleMatrix(new double[] {0.07, 0.11, 0.12, 0.49, 0.13, 0.28, 25.21})}),
          new MatxList(new Object[] {"Handmade Celeron 900MHz, Red Hat Linux 7.1", "Celeron 900MHz", new DoubleMatrix(new double[] {0.40, 0.58, 0.22, 0.83, 0.16, 0.38, 10.86})}),
          new MatxList(new Object[] {"Handmade PenIV 2.0GHz(Intel850) RIMM 1G, MaTX-VC", "PenIV 2.0GHz", new DoubleMatrix(new double[] {0.13, 0.09, 0.23, 0.28, 0.06, 0.23, 26.77})}),
          new MatxList(new Object[] {"TOSHIBA MVMT58TN.002, Celeron, Win98/MaTX-VC", "TOSHIBA MVMT58TN.002", new DoubleMatrix(new double[] {0.55, 0.60, 0.99, 0.99, 0.28, 0.99, 6.01})}),
          new MatxList(new Object[] {"Celsius , PenIV 1.4GHz, Win2000-SP2/MaTX-VC", "PenIV 1.4GHz", new DoubleMatrix(new double[] {0.21, 0.13, 0.40, 0.33, 0.10, 0.28, 18.61})}),
          new MatxList(new Object[] {"Sun Fire4800, UltraSPARCIII x 12, SunOS5.6", "Sun Fire4800", new DoubleMatrix(new double[] {0.23, 0.20, 0.20, 0.18, 0.24, 0.57, 16.29})}),
          new MatxList(new Object[] {"IBM ThinkPad X22, PenIII-M 733MHz, WinXP/MaTX-VC6", "ThikPad X22", new DoubleMatrix(new double[] {0.09, 0.09, 0.41, 0.39, 0.17, 0.48, 18.44})}), //$NON-NLS-2$
          new MatxList(new Object[] {"Fujitsu FMV-BIBLO NUV16X, Pen 160MHz, Win95/MaTX-VC6", "Fujitsu FMV-BIBLO NUV16X", new DoubleMatrix(new double[] {1.53, 1.21, 3.79, 3.08, 0.83, 2.69, 2.11})}),
          new MatxList(new Object[] {"DELL PowerEdge 1400SC, PenII 1GHz, Solaris8 X86, gcc", "DELL PowerEdge 1400SC", new DoubleMatrix(new double[] {0.25, 0.32, 0.15, 0.40, 0.16, 0.45, 15.18})}),
          new MatxList(new Object[] {"CELSIUS, PenIV 2GHz, Win2000 SP1/MaTX-DJ", "CELSIUS PenIV 2GHz", new DoubleMatrix(new double[] {0.16, 0.11, 0.11, 0.55, 0.05, 0.16, 27.44})}),
          new MatxList(new Object[] {"PRIMERGY HS910, PenIII Xeon 7OOMHz X 2, WinNT 4.0SV/MATX-DJ", "PenIII Xeon 7OOMHz X 2",
              new DoubleMatrix(new double[] {0.38, 0.27, 0.33, 0.27, 0.22, 0.44, 12.88})}),
          new MatxList(new Object[] {"FMV-6000NU, PenIII 1GHz, Win2000/MaTX-DJ", "FMV-6000NU", new DoubleMatrix(new double[] {0.16, 0.16, 0.27, 0.60, 0.11, 0.33, 17.20})}),
          new MatxList(new Object[] {"AFiNA, Celeron 700MHz, WinME/MaTX-DJ", "AFiNA", new DoubleMatrix(new double[] {0.60, 0.77, 0.22, 0.82, 0.16, 0.49, 9.22})}),
          new MatxList(new Object[] {"Let's note CF-A3, Mobile PenIII 700MHz, Vine 2.5/gcc-2.95.3", "Let's note CF-A3", new DoubleMatrix(new double[] {0.13, 0.16, 0.22, 0.44, 0.23, 0.54, 16.02})}),
          new MatxList(new Object[] {"Fujitsu BIBLO LIFEBOOK 645NU6C/W, Celeron 450MHz, Win98", "FMV645NU6C/W", new DoubleMatrix(new double[] {1.04, 0.72, 0.93, 0.66, 0.27, 0.77, 5.95})}),
          new MatxList(new Object[] {"DELL Dimension 4500, PenIV 2GHz, Vine Linux 2.5/gcc-2.59.3", "DELL Dimension 4500", new DoubleMatrix(new double[] {0.10, 0.04, 0.10, 0.28, 0.07, 0.24, 36.19})}),
          new MatxList(new Object[] {"Handmade, PenIV 3.06GHz, RedHat Linux 8.0", "PenIV 3.06GHz", new DoubleMatrix(new double[] {0.08, 0.04, 0.07, 0.25, 0.05, 0.15, 46.27})}), //$NON-NLS-1$ 
          new MatxList(new Object[] {"DynaBook A2/580PMC, PenIII 800MHz, Vine 2.6", "DynaBook A2/580PMC", new DoubleMatrix(new double[] {0.26, 0.29, 0.19, 0.49, 0.20, 0.45, 13.73})}),
          new MatxList(new Object[] {"DELL Dimension 8250, PenIV 2.40GHz(1Gb mem), WinXP/MaTX-BC", "DELL Dimension 8250", new DoubleMatrix(new double[] {0.11, 0.11, 0.16, 0.34, 0.05, 0.16, 31.03})}),
          new MatxList(
              new Object[] {"DELL Dimension 8250, PenIV 2.40GHz (1Gb mem), Win2000/MaTX-BC", "DELL Dimension 8250", new DoubleMatrix(new double[] {0.11, 0.14, 0.23, 0.36, 0.05, 0.16, 27.62})}),
          new MatxList(new Object[] {"DELL Dimension 8250, PenIV 2.40GHz (1Gb mem), RedHat8", "DELL Dimension 8250", new DoubleMatrix(new double[] {0.10, 0.05, 0.08, 0.22, 0.08, 0.16, 40.05})}),
          new MatxList(new Object[] {"Handmade ASUSTekP4B533-VM, PenIV 2.8GHz, WinXP/MaTX-VC", "Handmade ASUSTekP4B533-VM", new DoubleMatrix(new double[] {0.08, 0.02, 0.17, 0.36, 0.05, 0.23, 41.30})}),
          new MatxList(new Object[] {"SONY PCG-FX77S/BP, PenIII 1.0GHz, Vine Linux 2.5", "SONY PCG-FX77S/BP", new DoubleMatrix(new double[] {0.32, 0.40, 0.17, 0.58, 0.16, 0.32, 13.68})}),
          new MatxList(new Object[] {"Handmade, Celeron 2.0GHz, Vine Linux 2.6", "Celeron 2.0GHz, Vine", new DoubleMatrix(new double[] {0.12, 0.11, 0.12, 0.55, 0.07, 0.33, 24.38})}),
          new MatxList(new Object[] {"SOTEC PC STATION V7160C, Athron 1600+ 1400MHz, WinXP/MaTX-VC", "SOTEC V7160C", new DoubleMatrix(new double[] {0.09, 0.06, 0.30, 0.42, 0.08, 0.17, 27.49})}),
          new MatxList(new Object[] {"SONY VIO PCG-V505E/B, Celeron 1.8GHz, Redhat9", "SONY PCG-V505E/B", new DoubleMatrix(new double[] {0.13, 0.08, 0.13, 0.47, 0.08, 0.25, 26.32})}),
          new MatxList(new Object[] {"Mouse Computer, Athlon XP 1.8GHz 2500+, Win2000/MaTX-BC", "Mouse Computer", new DoubleMatrix(new double[] {0.11, 0.08, 0.17, 0.38, 0.06, 0.12, 31.46})}),
          new MatxList(new Object[] {"Gateway GP6-333c, Celeron 333MHz, Win98", "Gateway GP6-333c", new DoubleMatrix(new double[] {1.10, 0.72, 1.15, 1.10, 0.38, 0.99, 4.73})}),
          new MatxList(new Object[] {"Intel(R) Xeon(TM) 2.0GHz, Windows 2000 sp4", "Xeon(TM) 2.0GHz", new DoubleMatrix(new double[] {0.12, 0.14, 0.20, 0.45, 0.06, 0.19, 24.64})}),
          new MatxList(new Object[] {"Handmade, Celeron 2.4GHz, Red Hat Linux 9.0", "Celeron 2.4GHz, Redhat9", new DoubleMatrix(new double[] {0.09, 0.09, 0.12, 0.31, 0.06, 0.25, 31.27})}),
          new MatxList(new Object[] {"Handmade, Celeron 2.8GHz, Red Hat Linux 9.0", "Celeron 2.8GHz, Redhat9", new DoubleMatrix(new double[] {0.08, 0.11, 0.10, 0.39, 0.05, 0.20, 32.74})})});

  /**
   * コンストラクター
   */
  public Bench() {
    sortDataByMerit();
  }

  /**
   * CPU速度についてデータをソートします。
   */
  private void sortDataByMerit() {
    int number = this.data.size();

    DoubleMatrix merit = new DoubleMatrix(1, number);
    for (int i = 1; i <= number; i++) {
      merit.setElement(i, ((DoubleMatrix)(this.data.getList(i).getMatrix(3))).getDoubleElement(7));
    }

    IntMatrix idx = merit.sort().getIndices().flipLeftRight();
    this.data = this.data.getSubList(idx);
  }

  /**
   * メインメソッド
   * 
   * @param args コマンドライン引数
   * @throws IOException キーボードから入力できない場合
   * @throws SolverStopException ソルバーが停止された場合
   */
  public static void main(String[] args) throws IOException, SolverStopException {
    String lineSeparator = System.getProperty("line.separator"); //$NON-NLS-1$
    String dir = System.getProperty("user.dir"); //$NON-NLS-1$
    String path = System.getProperty("java.library.path"); //$NON-NLS-1$

    if (lineSeparator.equals("\n")) { //$NON-NLS-1$
      path = path + ":" + dir + "/lib/capjprof/linux"; //$NON-NLS-1$ //$NON-NLS-2$
      System.setProperty("java.library.path", path); //$NON-NLS-1$
    } else {
      path = path + ";" + dir + "\\lib\\capjprof\\win32"; //$NON-NLS-1$ //$NON-NLS-2$
      System.setProperty("java.library.path", path); //$NON-NLS-1$
    }

    new Bench().run();
  }

  /**
   * ベンチマークを実行します。
   * 
   * @throws IOException キーボードから入力できない場合
   * @throws SolverStopException ソルバーが停止された場合
   * 
   */
  public void run() throws IOException, SolverStopException {
    showBenchmarkProblems();
    Pause.pause();
    DoubleMatrix ts = new DoubleMatrix(1, 7);

    // ベンチマーク結果のヘッダーを表示
    System.out.println(""); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.404")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.405")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$

    // BenchTimer timer = new BenchTimer();
    // Stopwatch timer = new CPUStopwatch();
    ElapsedTimer timer = new ElapsedTimer();

    // 200 by 200 実行列乗算
    DoubleMatrix a = DoubleMatrix.uniformRandom(200);
    timer.start();
    a.multiply(a);
    ts.setElement(1, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(1))); //$NON-NLS-1$

    // N = 200 実行列の逆行列
    a = DoubleMatrix.uniformRandom(200);
    timer.start();
    a.inverse();
    ts.setElement(2, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(2))); //$NON-NLS-1$

    // N = 150 実行列の固有値
    a = DoubleMatrix.uniformRandom(150);
    timer.start();
    a.eigenValue();
    ts.setElement(3, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(3))); //$NON-NLS-1$

    // 2^17 点の複素 FFT
    DoubleComplexMatrix
    ac = DoubleComplexMatrix.uniformRandom(1, (int)Math.pow(2, 17)).add(DoubleComplexMatrix.ones(1, (int)Math.pow(2, 17)).multiply(new DoubleComplexNumber(0, 1)));
    timer.start();
    ac.fft();
    ts.setElement(4, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(4))); //$NON-NLS-1$

    // 100000 FOR ループ
    a = new DoubleMatrix(1, 100000);
    timer.start();
    for (int i = 1; i <= 100000; i++) {
      a.setElement(i, 1);
    }
    ts.setElement(5, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(5))); //$NON-NLS-1$

    // ode 1[s]
    timer.start();
    ode(1.0);
    ts.setElement(6, timer.getElapsedTime());
    System.out.print("   " + format(ts.getDoubleElement(6))); //$NON-NLS-1$

    // merit
    double merit = (this.js5.divideElementWise(ts.getSubVector(1, 6)).powerElementWise(1.0 / 6)).product().doubleValue();
    ts.setElement(7, merit);
    System.out.print("   " + format(ts.getDoubleElement(7))); //$NON-NLS-1$

    /*
     * System.out.println(""); System.out.println(""); System.out.println("");
     * System.out.println(""); System.out.println("
     * **************************************************************");
     * System.out.println(" * あたなた計算機(機種、OS、コンパイラ)のベンチマーク結果を *");
     * System.out.println(" * *"); System.out.println(" * matx-info@matx.org
     * *"); System.out.println(" * *"); System.out.println(" *
     * まで連絡して下さい。ベンチマークの比較表に追加します。 *"); System.out.println("
     * **************************************************************");
     * System.out.println(""); System.out.println("");
     */

    Pause.pause();

    MatxList yours = new MatxList(new Object[] {Messages.getString("Bench.406"), Messages.getString("Bench.407"), ts}); //$NON-NLS-1$ //$NON-NLS-2$

    printBenchTable(this.data, yours);

    int number = this.data.size();

    for (int i = 0; i < number / 7; i++) {
      if (i == number / 7 - 1) {
        System.out.println(Messages.getString("Bench.408")); //$NON-NLS-1$
        System.out.println(""); //$NON-NLS-1$
      } else {
        System.out.println(Messages.getString("Bench.409")); //$NON-NLS-1$
        System.out.println(""); //$NON-NLS-1$
      }
      printResult(this.data, 1 + i * 7, (i + 1) * 7, yours);
      System.out.println(""); //$NON-NLS-1$
      Pause.pause();
    }

  }

  /**
   * ベンチマークの問題を表示します。
   */
  private void showBenchmarkProblems() {
    System.out.println("**************************************************************"); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.411")); //$NON-NLS-1$
    System.out.println("*                                                            *"); //$NON-NLS-1$
    System.out.println("*  matx-info@matx.org                                        *"); //$NON-NLS-1$
    System.out.println("*                                                            *"); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.415")); //$NON-NLS-1$
    System.out.println("**************************************************************"); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.417")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.418")); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.419")); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.420")); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.421")); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.422")); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.423")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.424")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$
  }

  /**
   * シミュレーションのベンチマークを行います。
   * 
   * @param t1 シミュレーション時間
   * @throws SolverStopException ソルバーが停止された場合
   */
  void ode(double t1) throws SolverStopException {
    OdeBench system = new OdeBench();
    DoubleMatrix x0 = new DoubleMatrix(new double[] {1, 0, 0}).transpose();
    system.setInitialState(x0);
    DoubleDifferentialEquationSolver solver = new DoubleRungeKutta4();
    solver.setTimeStep(1.0E-3);
    solver.setMinimumSavingInterval(1.0E-2);
    new DoubleSystemSolver(solver).solve(system, 0.0, t1);
  }

  /**
   * ベンチマーク結果を表示します。
   * 
   * @param dataList 登録されている計算機の性能
   * @param n1 表示を開始する番号
   * @param n2 表示を停止する番号
   * @param yours 現在使用中の計算機の性能
   */
  void printResult(MatxList dataList, int n1, int n2, MatxList yours) {
    int number = dataList.size();
    MatxList computers = dataList.getSubList(IntMatrix.series(1, number));
    DoubleMatrix[] results = new DoubleMatrix[number];
    for (int i = 0; i < number; i++) {
      results[i] = (DoubleMatrix)computers.getList(i + 1).getMatrix(3);
    }

    for (int i = n1; i <= Math.min(n2, number - 1); i++) {
      System.out.print("     "); //$NON-NLS-1$
      if (i < 10) {
        System.out.print("  "); //$NON-NLS-1$
      } else if (i < 100) {
        System.out.print(" "); //$NON-NLS-1$
      }
      System.out.println(i + ") " + computers.getList(i).getString(1)); //$NON-NLS-1$
    }
    System.out.println("       *) " + yours.getString(1)); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$

    System.out.print("        "); //$NON-NLS-1$
    System.out.println(Messages.getString("Bench.425")); //$NON-NLS-1$
    System.out.println(""); //$NON-NLS-1$

    for (int i = n1; i <= Math.min(n2, number - 1); i++) {
      DoubleMatrix result = results[i - 1];
      System.out.print("     "); //$NON-NLS-1$
      if (i < 10) {
        System.out.print("  "); //$NON-NLS-1$
      } else if (i < 100) {
        System.out.print(" "); //$NON-NLS-1$
      }
      System.out.println(i
          + ")  " + format(result.getDoubleElement(1)) + "   " + format(result.getDoubleElement(2)) + "   " + format(result.getDoubleElement(3)) + "   " + format(result.getDoubleElement(4)) + "   " //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$//$NON-NLS-5$
          + format(result.getDoubleElement(5)) + "   " + format(result.getDoubleElement(6)) + "   " + format(result.getDoubleElement(7))); //$NON-NLS-1$//$NON-NLS-2$

    }

    DoubleMatrix result_y = (DoubleMatrix)yours.getMatrix(3);
    System.out
        .println("       *)  " + format(result_y.getDoubleElement(1)) + "   " + format(result_y.getDoubleElement(2)) + "   " + format(result_y.getDoubleElement(3)) + "   " + format(result_y.getDoubleElement(4)) //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$
            + "   " + format(result_y.getDoubleElement(5)) + "   " + format(result_y.getDoubleElement(6)) + "   " + format(result_y.getDoubleElement(7))); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
  }

  /**
   * ベンチマーク表を表示します。
   * 
   * @param dataList 登録されている計算機の性能
   * @param yours 現在使用中の計算機の性能
   * @throws IOException キーボードから入力できない場合
   */
  void printBenchTable(MatxList dataList, MatxList yours) throws IOException {
    int number = dataList.size();
    for (int i = 0; i < number / 16; i++) {
      System.out.println(""); //$NON-NLS-1$
      System.out.println(""); //$NON-NLS-1$
      System.out.print(Messages.getString("Bench.426")); //$NON-NLS-1$
      System.out.println(Messages.getString("Bench.427")); //$NON-NLS-1$
      System.out.println(Messages.getString("Bench.428")); //$NON-NLS-1$
      System.out.println(""); //$NON-NLS-1$

      for (int j = i * 16 + 1; j <= Math.min(number - 1, (i + 1) * 16); j++) {
        MatxList computer = dataList.getList(j);
        String name = computer.getString(2);
        double value = ((DoubleMatrix)computer.getMatrix(3)).getDoubleElement(7);

        System.out.print(name + ": "); //$NON-NLS-1$
        printSpaces(25 - name.length());
        System.out.print(format(value));

        if (16 < number && j < number - 16) {
          MatxList computer2 = dataList.getList(j + 16);
          String name2 = computer2.getString(2);
          double value2 = ((DoubleMatrix)(computer2.getMatrix(3))).getDoubleElement(7);
          System.out.print("         "); //$NON-NLS-1$
          System.out.print(name2 + ": "); //$NON-NLS-1$
          printSpaces(25 - name2.length());
          System.out.print(format(value2));
        }
        System.out.println(""); //$NON-NLS-1$
      }
      System.out.println(""); //$NON-NLS-1$
      String yoursName = yours.getString(2);
      System.out.print(yoursName + ":  "); //$NON-NLS-1$
      printSpaces(25 - yoursName.length() * 2);
      System.out.println(format(((DoubleMatrix)(yours.getMatrix(3))).getDoubleElement(7)));
      Pause.pause();
    }

  }

  /**
   * スペースを表示します。
   * 
   * @param n スペースの数
   */
  private void printSpaces(int n) {
    StringBuffer spaces = new StringBuffer();
    for (int i = 0; i < n; i++) {
      spaces.append(" "); //$NON-NLS-1$
    }
    System.out.print(spaces);
  }

  /**
   * フォーマットに従い文字列を生成します。
   * 
   * @param d 変換する実数
   * @return 生成された文字列
   */
  protected String format(double d) {
    String str = this.fmt.format(d);
    if (d < 10) {
      str = "  " + str; //$NON-NLS-1$
    } else if (d < 100) {
      str = " " + str; //$NON-NLS-1$
    }
    return str;
  }

}