tor-browser

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

regress-363040-02.js (1785B)


      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 
     23 // Print x as a continued fraction in compact abbreviated notation and return
     24 // the convergent [n, d] such that x - (n / d) <= epsilon.
     25  function contfrac(x, epsilon) {
     26    let i = Math.floor(x);
     27    let a = [i];
     28    x = x - i;
     29    let maxerr = x;
     30    while (maxerr > epsilon) {
     31      x = 1 / x;
     32      i = Math.floor(x);
     33      a.push(i);
     34      x = x - i;
     35      maxerr = x * maxerr / i;
     36    }
     37    print(a);
     38    return a.reduceRight(function (x, y) {return [x[0] * y + x[1], x[0]];}, [1, 0]);
     39  }
     40 
     41  if (!Array.prototype.reduceRight)
     42  {
     43    print('Test skipped. Array.prototype.reduceRight not implemented');
     44  }
     45  else
     46  {
     47 // Show contfrac in action on some interesting numbers.
     48    for (num of [Math.PI, Math.sqrt(2), 1 / (Math.sqrt(Math.E) - 1)]) {
     49      print('Continued fractions for', num);
     50      for (eps of [1e-2, 1e-3, 1e-5, 1e-7, 1e-10]) {
     51        let frac = contfrac(num, eps);
     52        let est = frac[0] / frac[1];
     53        let err = num - est;
     54        print(frac, est, err);
     55      }
     56      print();
     57    }
     58  }
     59 
     60  reportCompare(expect, actual, summary);
     61 }