JavaScriptCore:
[WebKit-https.git] / SunSpider / tests / math-cordic.js
1 // Copyright (C) 2007 Rich Moore 
2
3 /////. Start CORDIC
4
5 var AG_CONST = 0.6072529350;
6
7 function FIXED(X)
8 {
9   return X * 65536.0;
10 }
11
12 function FLOAT(X)
13 {
14   return X / 65536.0;
15 }
16
17 function DEG2RAD(X)
18 {
19   return 0.017453 * (X);
20 }
21
22 var Angles = [
23   FIXED(45.0), FIXED(26.565), FIXED(14.0362), FIXED(7.12502),
24   FIXED(3.57633), FIXED(1.78991), FIXED(0.895174), FIXED(0.447614),
25   FIXED(0.223811), FIXED(0.111906), FIXED(0.055953),
26   FIXED(0.027977) 
27               ];
28
29
30 function cordicsincos() {
31     var X;
32     var Y;
33     var TargetAngle;
34     var CurrAngle;
35     var Step;
36  
37     X = FIXED(AG_CONST);         /* AG_CONST * cos(0) */
38     Y = 0;                       /* AG_CONST * sin(0) */
39
40     TargetAngle = FIXED(28.027);
41     CurrAngle = 0;
42     for (Step = 0; Step < 12; Step++) {
43         var NewX;
44         if (TargetAngle > CurrAngle) {
45             NewX = X - (Y >> Step);
46             Y = (X >> Step) + Y;
47             X = NewX;
48             CurrAngle += Angles[Step];
49         } else {
50             NewX = X + (Y >> Step);
51             Y = -(X >> Step) + Y;
52             X = NewX;
53             CurrAngle -= Angles[Step];
54         }
55     }
56 }
57
58 ///// End CORDIC
59
60 function cordic( runs ) {
61   var start = new Date();
62
63   for ( var i = 0 ; i < runs ; i++ ) {
64       cordicsincos();
65   }
66
67   var end = new Date();
68
69   return end.getTime() - start.getTime();
70 }
71
72 cordic(30000);