tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

regress-363040-01.js (1770B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 //-----------------------------------------------------------------------------
      7 var BUGNUMBER = 363040;
      8 var summary = 'Array.prototype.reduce application in continued fraction';
      9 var actual = '';
     10 var expect = '';
     11 
     12 
     13 //-----------------------------------------------------------------------------
     14 test();
     15 //-----------------------------------------------------------------------------
     16 
     17 function test()
     18 {
     19  printBugNumber(BUGNUMBER);
     20  printStatus (summary);
     21 
     22 // Print x as a continued fraction in compact abbreviated notation and return
     23 // the convergent [n, d] such that x - (n / d) <= epsilon.
     24  function contfrac(x, epsilon) {
     25    let i = Math.floor(x);
     26    let a = [i];
     27    x = x - i;
     28    let maxerr = x;
     29    while (maxerr > epsilon) {
     30      x = 1 / x;
     31      i = Math.floor(x);
     32      a.push(i);
     33      x = x - i;
     34      maxerr = x * maxerr / i;
     35    }
     36    print(a);
     37    a.push([1, 0]);
     38    a.reverse();
     39    return a.reduce(function (x, y) {return [x[0] * y + x[1], x[0]];});
     40  }
     41 
     42  if (!Array.prototype.reduce)
     43  {
     44    print('Test skipped. Array.prototype.reduce not implemented');
     45  }
     46  else
     47  {
     48 // Show contfrac in action.
     49    for (num of [Math.PI, Math.sqrt(2), 1 / (Math.sqrt(Math.E) - 1)]) {
     50      print('Continued fractions for', num);
     51      for (eps of [1e-2, 1e-3, 1e-5, 1e-7, 1e-10]) {
     52        let frac = contfrac(num, eps);
     53        let est = frac[0] / frac[1];
     54        let err = num - est;
     55        print(frac, est, err);
     56      }
     57      print();
     58    }
     59  }
     60 
     61  reportCompare(expect, actual, summary);
     62 }