This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Floating Addition - Loosing data

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_();
      }
    }
  }

My project is setup using the P89C668 with all default options EXCEPT "bits to round for float compare" is set to 1. I tried all levels of optimization and the result was the same in all cases.

I then set a breakpoint on each nop. When I simulate the program and hit run, a break occurs on the second nop. This would indicate that the addition opperation lost some data.

Whats happening here? Why would the addition opperation not properly calculate the result while the multiplication does?

Thanks
Philip

Parents
  • But if you see a manifest constant written 0.1, that practically always is floating point. I don't think I've seen any programming language in which "10.0 * 0.1" would be evaluated in some fixed point number format. Have you?
    I have programmed for more years than most and never had to use floating point.

    Floating point is the lazy mans way to handle fractions.

    Erik

Reply
  • But if you see a manifest constant written 0.1, that practically always is floating point. I don't think I've seen any programming language in which "10.0 * 0.1" would be evaluated in some fixed point number format. Have you?
    I have programmed for more years than most and never had to use floating point.

    Floating point is the lazy mans way to handle fractions.

    Erik

Children