# Low Precision Sine and Cosine

Actionscript:
1. var t:Number=0, cos:Number, sin:Number;
2.
3. var canvas:BitmapData = new BitmapData(400,400,false, 0x000000);
5.
6. var shape:Shape = new Shape();
7. with(shape.graphics) beginFill(0x568338, .2), drawCircle(0,0,10);
8.
10. function onLoop(evt:Event):void {
11.
12.          t += .1;
13.         // -- low precision sine/cosine
14.         //always wrap input angle to -PI..PI
15.         if (t <-3.14159265){
16.             t += 6.28318531;
17.         }else{
18.         if (t>  3.14159265)
19.             t -= 6.28318531;
20.         }
21.
22.         //compute sine
23.         if (t <0){
24.             sin = 1.27323954 * t + .405284735 * t * t;
25.         }else{
26.             sin = 1.27323954 * t - 0.405284735 * t * t;
27.         }
28.
29.         //compute cosine: sin(t + PI/2) = cos(t)
30.         t += 1.57079632;
31.         if (t>  3.14159265){
32.             t -= 6.28318531;
33.         }
34.
35.         if (t <0){
36.             cos = 1.27323954 * t + 0.405284735 * t * t
37.         }else{
38.             cos = 1.27323954 * t - 0.405284735 * t * t;
39.         }
40.         t -= 1.57079632;
41.
42.         // move the shape
43.         shape.x = 200 + 100 * cos;
44.         shape.y = 200 + 100 * sin;
45.
46.         // draw to the canvas
47.         canvas.draw(shape, shape.transform.matrix);
48. }

This snippet draws a circle using low precision sine and cosine... you'll notice that its not a perfect looking circle: Back in January I saw this blog post by Michael Baczynski over at http://lab.polygonal.de/. The blog post describes a technique for fast sine and cosine approximation - (I highly recommend giving it a read - very fun stuff).

It's worth noting that there is a higher precision sine and cosine that will likely draw a better looking circle but will be about half as fast. According to the original post ... the low precision technique is approximately 14x faster than using Math.cos()/Math.sin().

There some other really great posts over at polygonal go check them out.

1. michael welford
Posted March 22, 2009 at 5:42 pm | Permalink

Thanks for this!

I was looking into optimised sin/cos and found quite a lot of nice information in the presentation files for these talks:

http://www.research.scea.com/gdc2003/fast-math-functions.html

2. Zevan
Posted March 22, 2009 at 6:33 pm | Permalink

Thanks for the link, just skimming the first pdf… looks very interesting • 