tor-browser

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

check-math-cordic.js (2645B)


      1 /*
      2 * Copyright (C) Rich Moore.  All rights reserved.
      3 *
      4 * Redistribution and use in source and binary forms, with or without
      5 * modification, are permitted provided that the following conditions
      6 * are met:
      7 * 1. Redistributions of source code must retain the above copyright
      8 *    notice, this list of conditions and the following disclaimer.
      9 * 2. Redistributions in binary form must reproduce the above copyright
     10 *    notice, this list of conditions and the following disclaimer in the
     11 *    documentation and/or other materials provided with the distribution.
     12 *
     13 * THIS SOFTWARE IS PROVIDED BY CONTRIBUTORS ``AS IS'' AND ANY
     14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     24 */
     25 
     26 /////. Start CORDIC
     27 
     28 var AG_CONST = 0.6072529350;
     29 
     30 function FIXED(X)
     31 {
     32  return X * 65536.0;
     33 }
     34 
     35 function FLOAT(X)
     36 {
     37  return X / 65536.0;
     38 }
     39 
     40 function DEG2RAD(X)
     41 {
     42  return 0.017453 * (X);
     43 }
     44 
     45 var Angles = [
     46  FIXED(45.0), FIXED(26.565), FIXED(14.0362), FIXED(7.12502),
     47  FIXED(3.57633), FIXED(1.78991), FIXED(0.895174), FIXED(0.447614),
     48  FIXED(0.223811), FIXED(0.111906), FIXED(0.055953),
     49  FIXED(0.027977) 
     50              ];
     51 
     52 
     53 function cordicsincos() {
     54    var X;
     55    var Y;
     56    var TargetAngle;
     57    var CurrAngle;
     58    var Step;
     59 
     60    X = FIXED(AG_CONST);         /* AG_CONST * cos(0) */
     61    Y = 0;                       /* AG_CONST * sin(0) */
     62 
     63    TargetAngle = FIXED(28.027);
     64    CurrAngle = 0;
     65    for (Step = 0; Step < 12; Step++) {
     66        var NewX;
     67        if (TargetAngle > CurrAngle) {
     68            NewX = X - (Y >> Step);
     69            Y = (X >> Step) + Y;
     70            X = NewX;
     71            CurrAngle += Angles[Step];
     72        } else {
     73            NewX = X + (Y >> Step);
     74            Y = -(X >> Step) + Y;
     75            X = NewX;
     76            CurrAngle -= Angles[Step];
     77        }
     78    }
     79    return CurrAngle;
     80 }
     81 
     82 ///// End CORDIC
     83 
     84 function cordic( runs ) {
     85  var actual;
     86 
     87  for ( var i = 0 ; i < runs ; i++ ) {
     88    actual = cordicsincos();
     89  }
     90 
     91  assertEq(actual, 1834995.3515519998)
     92 }
     93 
     94 cordic(25000);