We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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_(); } } }
"The question is how to resolve it" Do you really need to use floating point? As has already been discussed, this will always result in such problems. Could you use fixed-point instead?
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)