mfinzi / libfixmath

Automatically exported from code.google.com/p/libfixmath
0 stars 0 forks source link

FIXMATH_FAST_SIN gives rounding error #24

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
I've found a bug with your fast implementation of sin() (FIXMATH_FAST_SIN), 
this bug doesn't happen with the more accurate version.
I made an animation of a rotating cube but noticed it would shudder, i tracked 
it down to the sin function providing very poor accuracy as the return value 
from it reached and passed 0.

I'm running it in Visual Studio 2009 and tracking the values in the debugger so 
the values i see are the 32bit number representation of the fix16_t variable 
but they go like this...
1842, 899, -74, -1055, -2037, -2990, -3979, all good so far, then suddenly it 
jumps back to positive with 4782, 3790, 2803, ... it then continues down 
through to -65536 (-1.0) as it should do.

Original issue reported on code.google.com by bynun...@gmail.com on 21 Apr 2013 at 12:58

GoogleCodeExporter commented 9 years ago
In addition, each step i'm taking is (6.2832f / 500.0f) so a full rotation (1 
-> -1 -> 1) in 500 steps although it should be repeatable with any small step.

Original comment by bynun...@gmail.com on 21 Apr 2013 at 1:01