Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Find out maintained repository #2

Open
wants to merge 69 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
539b35a
include Brent's method - taken from https://gist.github.com/3317728
GerHobbelt Dec 3, 2012
562d3fb
tweaked the build process to fit my needs.
GerHobbelt Dec 16, 2012
35b67b6
gitattributes
GerHobbelt Dec 16, 2012
79403ad
whitespace police raid: CRLF/TAB=4/DETAB
GerHobbelt Dec 24, 2012
0a970fc
Merge tag 'v1.2.6'
GerHobbelt Jan 31, 2013
1975d8d
CRLF --> LF thanks to .gitattributes
GerHobbelt Feb 5, 2013
27bd27b
CRLF / LF fixup due to gitattributes
gibito Feb 6, 2013
566074c
Merge branch 'master' of github.com:GerHobbelt/numeric
gibito Feb 6, 2013
a2b0ccd
added different declaration style to allow AMD syntax
Apr 30, 2013
395bbb5
removed dependencies on global "numeric" variable. unit tests pass.
Apr 30, 2013
e6c4c21
add Newton solver
kaige May 5, 2013
5db8779
Update numeric.js
xiphias May 14, 2013
9dd3c94
Allow \r\n as separator for parseCSV
xiphias May 14, 2013
76c7968
Avoid reaching out to numeric in global namespace in compiled code.
jwmerrill Sep 17, 2013
ee59f1c
Added logspace which mimics Matlab/octave's logspace.
wojciechwasko Oct 23, 2013
1a68545
Added conjugate gradient solver. Supports both full matrix and sparse…
phg1024 Nov 7, 2013
2a15d50
added bicgstab algorithm
phg1024 Nov 7, 2013
067dc96
Merge branch 'master' of https://github.com/phg1024/numeric
phg1024 Nov 7, 2013
a1284cd
added test cases for iterative solvers.
phg1024 Nov 7, 2013
7435435
1. minor change in the solvers
phg1024 Nov 7, 2013
b6789e4
added SOR solver.
phg1024 Nov 9, 2013
249a885
Add failing test
dantswain Nov 19, 2013
2389056
Bugfix for toCSV.
mlehman Dec 16, 2013
38b1f40
fix typo
xizhonghua Oct 23, 2014
a01124e
1. implement ccsDiag/ccsTranspose
xizhonghua Oct 23, 2014
cc3e0ff
Change CRLF to newlines only.
gagern Nov 18, 2014
233fcd6
Explicitely state all semicolons.
gagern Nov 18, 2014
1115f6b
Ensure proper binding for dynamically generated functions.
gagern Feb 16, 2015
3a63a92
Fixed 100 rendered as 1e2 by prettyPrint
Feb 18, 2015
63237db
Fix unreachable code warnings in Firefox 40.
jwmerrill Jun 27, 2015
07e4134
Remove potentially extraneous semicolon.
jwmerrill Jun 27, 2015
b341073
added bower file for integration
victorsosa Dec 3, 2015
5c23748
fix dependency bower.json file
victorsosa Dec 3, 2015
434c3c7
fix dependency bower.json file
victorsosa Dec 3, 2015
774f7e5
added jacobi method
georglind Apr 5, 2016
71851ee
updated readme
georglind Apr 5, 2016
b296df2
updated readme
georglind Apr 5, 2016
df12547
Merge pull request #1 from desmosinc/fix.firefox-unreachable-warnings
victorsosa Aug 6, 2016
2228880
Merge pull request #2 from Pastafarianist/patch-1
victorsosa Aug 6, 2016
edb86ba
Merge remote-tracking branch 'remotes/mlehman/master'
GerHobbelt Sep 9, 2016
faec77d
Merge remote-tracking branch 'remotes/xiphias/master'
GerHobbelt Sep 9, 2016
4bb43b1
Merge remote-tracking branch 'remotes/dantswain/eig_3by3'
GerHobbelt Sep 9, 2016
4acae15
Merge commit '38b1f40936583136c59ce40a9981ce0235c3abfa'
GerHobbelt Sep 9, 2016
82ad94d
Merge remote-tracking branch 'remotes/gagern/realReciprocal'
GerHobbelt Sep 9, 2016
b7bdb23
Merge remote-tracking branch 'remotes/desmosinc/fix.firefox-unreachab…
GerHobbelt Sep 9, 2016
c32a8c5
Merge remote-tracking branch 'remotes/desmosinc/non-global-compile'
GerHobbelt Sep 9, 2016
8624870
Merge remote-tracking branch 'remotes/gagern/bindFunctions'
GerHobbelt Sep 9, 2016
9917ec5
Merge remote-tracking branch 'remotes/gagern/semicolons'
GerHobbelt Sep 9, 2016
a9f343a
Merge remote-tracking branch 'remotes/kaige/master'
GerHobbelt Sep 9, 2016
d242a69
Merge remote-tracking branch 'remotes/wojciechwasko/master'
GerHobbelt Sep 9, 2016
77b8eb4
Merge remote-tracking branch 'remotes/phg1024/master'
GerHobbelt Sep 9, 2016
0cac22c
Merge remote-tracking branch 'remotes/xizhonghua/master'
GerHobbelt Sep 9, 2016
44aa72c
Merge remote-tracking branch 'remotes/peoplewareDo/master'
GerHobbelt Sep 9, 2016
6da7713
Merge remote-tracking branch 'remotes/georglind/master'
GerHobbelt Sep 9, 2016
211fd20
Merge remote-tracking branch 'remotes/wellcaffeinated/master'
GerHobbelt Sep 9, 2016
f8b186b
Added `pi` and `e` constants...
orangeduck Oct 7, 2014
1e370b4
Fixed bugs in CSV parsing/writing
orangeduck Oct 10, 2014
8aa8cc3
Removed debug output from csv parser.
GerHobbelt Sep 9, 2016
f772921
Added roll flip and kron functions
orangeduck Oct 20, 2014
ffc0cc6
Added `zeros`, `ones`, `range` and `empty` functions. Updated the `lo…
orangeduck Oct 20, 2014
cda26ee
make tools/build.sh work again: install uglify via NPM ==> add develo…
GerHobbelt Sep 10, 2016
55ac0e0
cleaned up the source files being fed into tools/build.sh to construc…
GerHobbelt Sep 10, 2016
5d3c285
updated documentation sources
GerHobbelt Sep 10, 2016
8f2f6d4
do not use the minified library files - this simplifies debugging *a …
GerHobbelt Sep 10, 2016
2240e58
sylvester.js crashed badly in a nasty eval(); regenerated sylvester m…
GerHobbelt Sep 10, 2016
0311c23
regenerated the megalib via tools/build.sh
GerHobbelt Sep 10, 2016
793b728
benchmark pages finally run again! synced headers/layout code for al…
GerHobbelt Sep 10, 2016
e71568f
updated version in development package.json
GerHobbelt Sep 10, 2016
e21f850
rebuilt library; not everyone can rebuild, hence we include the uncom…
GerHobbelt Sep 11, 2016
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
*.sh text eol=lf
*.php text eol=lf
*.inc text eol=lf
*.html text eol=lf
*.js text eol=lf
*.css text eol=lf
*.ini text eol=lf
*.txt text eol=lf
*.xml text eol=lf
*.md text eol=lf
*.markdown text eol=lf

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
*.rar
*.tar
*.zip

# installed NPM packages
node_modules/

# Emacs backups
*~
Expand Down
52 changes: 47 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,48 @@
Numeric Javascript by Sébastien Loisel
======================================
This is a fork of Numeric Javascript by Sébastien Loisel.

Changes
------

Notable changes compared with numeric-1.2.6.js

- numeric.jacobi(A, maxiter), that diagonalizes symmetric real matrices (real hermitian). No problems with repeated eigenvalues/symmetry.

- numeric.eigh(A, maxiter), mirrors numeric.jacobi.

- numeric.jacobinorm(A), helper for numeric.jacobi, computes the weight in the upper triangular part of a square matrix.

- extra iterative solvers:

+ numeric.ccsMV(A, x), CCS matrix mul dense vector helper

+ numeric.bicgstab(A, b, maxIters, residue), BICGSTAB algorithm

+ numeric.cg(A, b, maxIters, residue), conjugate gradient (CG) solver. Supports both full matrix and sparse matrix.

+ numeric.sor(A, b, relax, maxIters, residue), SOR solver. The performance of the SOR solver is not as good as CG and BiCGSTAB, but similar to ccsLUPSolve. In practice, CG and BiCGSTAB should always be the best options.

+ numeric.newtonSolve(F, A, x), Newton solver. Ported from GSL(GNU Scientific Library)'s globally convergent Newton method (gsl-1.15\multiroots\gnewton.c). This Newton solver has been successfully used to implement a simple geometric constraint solver in project Rena (https://github.com/kaige/Rena).

+ numeric.uniroot(func, lowerLimit, upperLimit, errorTol, maxIter), search the interval from <tt>lowerLimit</tt> to <tt>upperLimit</tt> for a root (i.e., zero) of the function <tt>func</tt> with respect to its first argument using Brent's method root-finding algorithm.

- numeric.logspace(), another fill routine akin to numeric.linspace() but now for logarithmic space fills.

- numeric.zeros(), numeric.ones(), numeric.empty(), numeric.range(): methods to fill a vector or Array with fixed values.

- numeric.roll(), numeric.flip(), numeric.fliplr(), numeric.flipud(), numeric.rot90(): methods to flip/rotate Arrays (matrices).

- numeric.kron(x, y), Kronecker's method applied to a matrix.

- numeric.ccsDiag(diag), numeric.ccsTranspose(A): numeric.ccsScatter helpers

- numeric.pi, numeric.e: high precision math constants

- CSV I/O bugfixes



Introduction
------

Numeric Javascript is a javascript library for doing numerical
analysis in the browser. Because Numeric Javascript uses only the
Expand All @@ -12,7 +55,7 @@ asking a server to compute something. Indeed, you do not need a
powerful server (or any server at all) since your web app will perform
all its calculations in the client.

For further information, see http://www.numericjs.com/
The original website, see http://www.numericjs.com/
Discussion forum: http://groups.google.com/group/numericjs

License
Expand Down Expand Up @@ -47,5 +90,4 @@ the numericjs.com web site, which you probably won't need.
Building and testing
--------------------

If you tweak the code, you can build and test the library by running the script /tools/build.sh. If you plan
to send me patches, please at least run this build script and check that all the tests pass.
If you tweak the code, you can build and test the library by running the script /tools/build.sh.
262 changes: 133 additions & 129 deletions benchmark.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
<!doctype html>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Numerical analysis in javascript: library and console." />
<meta name="keywords" content="Javascript,HTML,simplex,matrix,vector,linear algebra" />
<meta name="author" content="S�bastien Loisel" />
<link rel="SHORTCUT ICON" href="favicon.ico">
<link href='http://fonts.googleapis.com/css?family=Lato' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="resources/style.css">
Expand All @@ -25,8 +29,8 @@
<!--<script src="lib/numeric.js"></script>
<script src="tools/sylvester.js"></script>
<script src="tools/trunk/closure/goog/base.js"></script>
<script src="tools/jquery-1.7.1.min.js"></script>
<script src="tools/jquery.flot.min.js"></script>-->
<script src="tools/jquery-1.7.1.js"></script>
<script src="tools/jquery.flot.js"></script>-->
<script src="tools/benchlib.js"></script>

<script>
Expand All @@ -49,59 +53,59 @@
var mkA = function(n) { return numeric.random([n,n]); };
var mkV = function(n) { return numeric.random([n]); };
var benchmarks = [
[
'abs(vector)', [3,10,30,100,300,1000,3000],
function(n) { var V = mkV(n); return bench(function() { numeric.abs(V); }); },
function(n) { var V = new goog.math.Matrix([mkV(n)]); return bench(function() { V.toArray().map(Math.abs); }); },
function(n) { var V = $V(mkV(n)); return bench(function() { V.map(Math.abs); }); }
],
[
'Create identity', [3,10,30,100,300,1000],
function(n) { return bench(function() { numeric.identity(n); }); },
function(n) { return bench(function() { goog.math.Matrix.createIdentityMatrix(n); }); },
function(n) { return bench(function() { Matrix.I(n); }); }
],
[
'Matrix transpose', [3,10,30,100,300,1000],
function(n) { var A = mkA(n); return bench(function() { numeric.transpose(A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.getTranspose(); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.transpose(); }); }
],
[
'Matrix-Vector product', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), V = mkV(n); return bench(function() { numeric.dot(A,V); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), V = new goog.math.Matrix([mkV(n)]).getTranspose(); return bench(function() { A.multiply(V); }); },
function(n) { var A = $M(mkA(n)), V = $V(mkV(n)); return bench(function() { A.multiply(V); }); }
],
[
'Vector-Matrix product', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), V = mkV(n); return bench(function() { numeric.dot(V,A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), V = new goog.math.Matrix([mkV(n)]); return bench(function() { V.multiply(A); }); },
function(n) { var A = $M(mkA(n)), V = $V(mkV(n)); return bench(function() { A.transpose().multiply(V); }); }
],
['Ax+b', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), x = mkV(n), b = mkV(n); return bench(function() { numeric.addeq(numeric.dot(A,x),b); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), x = new goog.math.Matrix([mkV(n)]).getTranspose(), b = new goog.math.Matrix([mkV(n)]).getTranspose(); return bench(function() { A.multiply(x).add(b); }); },
function(n) { var A = $M(mkA(n)), x = $V(mkV(n)), b = $V(mkV(n)); return bench(function() { A.multiply(x).add(b); }); }
],
[
'Matrix-Matrix product', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n), B = mkA(n); return bench(function() { numeric.dot(A,B); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), B = new goog.math.Matrix(mkA(n)); return bench(function() { A.multiply(B); }); },
function(n) { var A = $M(mkA(n)), B = $M(mkA(n)); return bench(function() { A.multiply(B); }); }
],
[
'Matrix-Matrix sum', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n); return bench(function() { numeric.add(A,A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.add(A); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.add(A); }); }
],
[
'Matrix inverse', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n); return bench(function() { numeric.inv(A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.getInverse(); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.inv(); }); }
],
[
'abs(vector)', [3,10,30,100,300,1000,3000],
function(n) { var V = mkV(n); return bench(function() { numeric.abs(V); }); },
function(n) { var V = new goog.math.Matrix([mkV(n)]); return bench(function() { V.toArray().map(Math.abs); }); },
function(n) { var V = $V(mkV(n)); return bench(function() { V.map(Math.abs); }); }
],
[
'Create identity', [3,10,30,100,300,1000],
function(n) { return bench(function() { numeric.identity(n); }); },
function(n) { return bench(function() { goog.math.Matrix.createIdentityMatrix(n); }); },
function(n) { return bench(function() { Matrix.I(n); }); }
],
[
'Matrix transpose', [3,10,30,100,300,1000],
function(n) { var A = mkA(n); return bench(function() { numeric.transpose(A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.getTranspose(); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.transpose(); }); }
],
[
'Matrix-Vector product', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), V = mkV(n); return bench(function() { numeric.dot(A,V); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), V = new goog.math.Matrix([mkV(n)]).getTranspose(); return bench(function() { A.multiply(V); }); },
function(n) { var A = $M(mkA(n)), V = $V(mkV(n)); return bench(function() { A.multiply(V); }); }
],
[
'Vector-Matrix product', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), V = mkV(n); return bench(function() { numeric.dot(V,A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), V = new goog.math.Matrix([mkV(n)]); return bench(function() { V.multiply(A); }); },
function(n) { var A = $M(mkA(n)), V = $V(mkV(n)); return bench(function() { A.transpose().multiply(V); }); }
],
['Ax+b', [3,10,30,100,300,1000],
function(n) { var A = mkA(n), x = mkV(n), b = mkV(n); return bench(function() { numeric.addeq(numeric.dot(A,x),b); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), x = new goog.math.Matrix([mkV(n)]).getTranspose(), b = new goog.math.Matrix([mkV(n)]).getTranspose(); return bench(function() { A.multiply(x).add(b); }); },
function(n) { var A = $M(mkA(n)), x = $V(mkV(n)), b = $V(mkV(n)); return bench(function() { A.multiply(x).add(b); }); }
],
[
'Matrix-Matrix product', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n), B = mkA(n); return bench(function() { numeric.dot(A,B); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)), B = new goog.math.Matrix(mkA(n)); return bench(function() { A.multiply(B); }); },
function(n) { var A = $M(mkA(n)), B = $M(mkA(n)); return bench(function() { A.multiply(B); }); }
],
[
'Matrix-Matrix sum', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n); return bench(function() { numeric.add(A,A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.add(A); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.add(A); }); }
],
[
'Matrix inverse', [3,5,10,20,30,50,75,100],
function(n) { var A = mkA(n); return bench(function() { numeric.inv(A); }); },
function(n) { var A = new goog.math.Matrix(mkA(n)); return bench(function() { A.getInverse(); }); },
function(n) { var A = $M(mkA(n)); return bench(function() { A.inv(); }); }
],
[
'Sparse Laplacian LU', [5,10,20,30],
function(n) { var A = numeric.ccsScatter(numeric.cdelsq(numeric.cgrid(n))); return bench(function() { numeric.ccsLUP(A); }); },
Expand All @@ -123,23 +127,23 @@
var datasets = [];
var l;
var colors = ["#000","#00f","#0f0","#f80","#f0f","#0ff"];
for(l=0;l<libs.length;l++) {
datasets[l] = {
data: [],
label: libs[l],
color: colors[l],
points: { show: true },
lines: { show: true }
};
for(l=0;l<libs.length;l++) {
datasets[l] = {
data: [],
label: libs[l],
color: colors[l],
points: { show: true },
lines: { show: true }
};
}
l=1;
var l0,xticks = [];
for(b=0;b<benchmarks.length;b++) {
l0 = l;
for(k=0;k<benchmarks[b][1].length;k++) {
l++;
}
xticks.push([(l0+l)*0.5,benchmarks[b][0]]);
l0 = l;
for(k=0;k<benchmarks[b][1].length;k++) {
l++;
}
xticks.push([(l0+l)*0.5,benchmarks[b][0]]);
}
k=0;
b=0;
Expand All @@ -149,66 +153,66 @@
var c0 = [[],[],[]];
var counts = [0,0,0];
function invbench(b,k,lib,rep) {
var ks,sz = benchmarks[b][1][k];
var i,j,foo;
ks = sz.toString();
if(rep>0 && c0[lib][rep-1] < 10) { c0[lib][rep] = c0[lib][rep-1]; }
else { foo = benchmarks[b][lib+2]; if(k===0) foo(sz); c0[lib][rep] = foo(sz); }
rep++;
if(rep === 1) { rep = 0; lib++; }
if(lib+2 === benchmarks[b].length) {
k++;
lib=0;
var cps = [];
var mi = 1e6/Math.pow(benchmarks[b][1][k-1],pwr[b]);
for(i=0;i<c0.length;i++) {
cps[i] = 0;
for(j=0;j<c0[i].length;j++) cps[i] += c0[i][j];
cps[i] /= (c0[i].length*mi);
}
for(i=0;i<cps.length;i++) {
if(MSIE || cps[i]) datasets[i].data.push([count,cps[i]]);
if(cps[i]) {
counts[i]++;
geometricmeans[i] += Math.log(cps[i]);
}
}
var foo = '<td>n='+ks+'</td>';
var color = '', uncolor='';
for(i=0;i<cps.length;i++) {
foo += '<td>'+cps[i].toPrecision(8)+'</td>';
}
if(!MSIE) {
var t = document.getElementById('bench');
var r = t.insertRow(-1);
if(k === 1) {
r.innerHTML = ('<td width=200px><b>'+benchmarks[b][0]+'</b></td>'
+'<td width=125px><b>Numeric</b></td>'
+'<td width=125px><b>Google Closure</b></td>'
+'<td width=125px><b>Sylvester</b></td>');
r = t.insertRow(-1);
}
r.innerHTML = foo;
}
$.plot($("#placeholder"), datasets,
{
legend: {container: '#legend'},
xaxis: {ticks:xticks, tickLength:0, min:1, max: l-1},
yaxis: {ticks:20}
});
c0 = [[],[],[]];
count++;
}
if(k === benchmarks[b][1].length) {
for(i=0;i<cps.length;i++) datasets[i].data.push(null);
k=0; b++;
}
if(b < benchmarks.length) {
setTimeout('invbench('+b.toString()
+','+k.toString()
+','+lib.toString()
+','+rep.toString()
+')',MSIE?10:0);
var ks,sz = benchmarks[b][1][k];
var i,j,foo;
ks = sz.toString();
if(rep>0 && c0[lib][rep-1] < 10) { c0[lib][rep] = c0[lib][rep-1]; }
else { foo = benchmarks[b][lib+2]; if(k===0) foo(sz); c0[lib][rep] = foo(sz); }
rep++;
if(rep === 1) { rep = 0; lib++; }
if(lib+2 === benchmarks[b].length) {
k++;
lib=0;
var cps = [];
var mi = 1e6/Math.pow(benchmarks[b][1][k-1],pwr[b]);
for(i=0;i<c0.length;i++) {
cps[i] = 0;
for(j=0;j<c0[i].length;j++) cps[i] += c0[i][j];
cps[i] /= (c0[i].length*mi);
}
for(i=0;i<cps.length;i++) {
if(MSIE || cps[i]) datasets[i].data.push([count,cps[i]]);
if(cps[i]) {
counts[i]++;
geometricmeans[i] += Math.log(cps[i]);
}
}
var foo = '<td>n='+ks+'</td>';
var color = '', uncolor='';
for(i=0;i<cps.length;i++) {
foo += '<td>'+cps[i].toPrecision(8)+'</td>';
}
if(!MSIE) {
var t = document.getElementById('bench');
var r = t.insertRow(-1);
if(k === 1) {
r.innerHTML = ('<td width=200px><b>'+benchmarks[b][0]+'</b></td>'
+'<td width=125px><b>Numeric</b></td>'
+'<td width=125px><b>Google Closure</b></td>'
+'<td width=125px><b>Sylvester</b></td>');
r = t.insertRow(-1);
}
r.innerHTML = foo;
}
$.plot($("#placeholder"), datasets,
{
legend: {container: '#legend'},
xaxis: {ticks:xticks, tickLength:0, min:1, max: l-1},
yaxis: {ticks:20}
});
c0 = [[],[],[]];
count++;
}
if(k === benchmarks[b][1].length) {
for(i=0;i<cps.length;i++) datasets[i].data.push(null);
k=0; b++;
}
if(b < benchmarks.length) {
setTimeout('invbench('+b.toString()
+','+k.toString()
+','+lib.toString()
+','+rep.toString()
+')',MSIE?10:0);
} else {
geometricmeans = numeric.exp(numeric.div(geometricmeans,counts));
$('#meanscore')[0].innerHTML += numeric.prettyPrint(geometricmeans)+'MFLOPS';
Expand Down
Loading