Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
michael@0 | 1 | // The Computer Language Shootout |
michael@0 | 2 | // http://shootout.alioth.debian.org/ |
michael@0 | 3 | // contributed by Isaac Gouy |
michael@0 | 4 | |
michael@0 | 5 | function partial(n){ |
michael@0 | 6 | var a1 = a2 = a3 = a4 = a5 = a6 = a7 = a8 = a9 = 0.0; |
michael@0 | 7 | var twothirds = 2.0/3.0; |
michael@0 | 8 | var alt = -1.0; |
michael@0 | 9 | var k2 = k3 = sk = ck = 0.0; |
michael@0 | 10 | |
michael@0 | 11 | for (var k = 1; k <= n; k++){ |
michael@0 | 12 | k2 = k*k; |
michael@0 | 13 | k3 = k2*k; |
michael@0 | 14 | sk = Math.sin(k); |
michael@0 | 15 | ck = Math.cos(k); |
michael@0 | 16 | alt = -alt; |
michael@0 | 17 | |
michael@0 | 18 | a1 += Math.pow(twothirds,k-1); |
michael@0 | 19 | a2 += Math.pow(k,-0.5); |
michael@0 | 20 | a3 += 1.0/(k*(k+1.0)); |
michael@0 | 21 | a4 += 1.0/(k3 * sk*sk); |
michael@0 | 22 | a5 += 1.0/(k3 * ck*ck); |
michael@0 | 23 | a6 += 1.0/k; |
michael@0 | 24 | a7 += 1.0/k2; |
michael@0 | 25 | a8 += alt/k; |
michael@0 | 26 | a9 += alt/(2*k -1); |
michael@0 | 27 | } |
michael@0 | 28 | |
michael@0 | 29 | return [ a1, a2, a3, a4, a5, a6, a7, a8, a9 ]; |
michael@0 | 30 | } |
michael@0 | 31 | |
michael@0 | 32 | var actual = []; |
michael@0 | 33 | for (var i = 1024; i <= 16384; i *= 2) |
michael@0 | 34 | Array.prototype.push.apply(actual, partial(i)); |
michael@0 | 35 | |
michael@0 | 36 | var eps = 1e-12; |
michael@0 | 37 | var expect = [2.9999999999999987,62.555269219624684,0.9990243902439033,30.174793391263677,42.99468748637077,7.509175672278132,1.6439579810301654,0.6926591377284127,0.785154022830656,2.9999999999999987,89.06036157695789,0.9995119570522216,30.30796333494624,42.99485339033617,8.202078771817716,1.6444459047881168,0.6929030995395857,0.7852760930922243,2.9999999999999987,126.54745783224483,0.999755918965097,30.314167756318135,42.994888939123,8.89510389696629,1.6446899560231332,0.6930251251486118,0.7853371282421086,2.9999999999999987,179.56450569047874,0.9998779445868421,30.314499725429847,42.99489723774016,9.588190046095265,1.644812003986005,0.693086149128997,0.785367645819433,2.9999999999999987,254.54355172132264,0.9999389685688135,30.31451920492601,42.99489939769195,10.281306710008463,1.6448730335545856,0.6931166639131536,0.7853829046083998]; |
michael@0 | 38 | |
michael@0 | 39 | assertEq(actual.length, expect.length); |
michael@0 | 40 | for (var i = 0; i < expect.length; ++i) |
michael@0 | 41 | assertEq(Math.abs(actual[i] - expect[i]) < eps, true); |