Hello, I'm making use of floating math in my application and have run into a little problem with floating addition. It seems that the floating addition operation looses data at some point. I setup the following test program:
#include <intrins.h> void main(void) { float t, v; unsigned int i; while(1) { // this block uses multiplication for(i=1; i<1000; i++) { t = 5964.1 * i; v = t/i; if(v != 5964.1) _nop_(); } t = 0; // this block will continuously add 5964.1 for(i=1; i<1000; i++) { t += 5964.1; v = t/i; if(v != 5964.1) _nop_(); } } }
Could you use fixed-point instead? That's what I ALWAYS do in systems where accuracy is important. The following is probably obvious but I'll point it out anyway. An int can hold any of the following value ranges EASILY:
-32768 to 32767 -3276.8 to 3276.7 (*10) -327.68 to 327.67 (*100) -32.768 to 32.767 (*1000) -3.2768 to 3.2767 (*10000)