c++ (about double and float)


Some asked me a question about a surpassingly bug in vc++. The original code looked like this:

double index;

      for(index=0.0;index<1.0;index+=0.1)

            cout<<(int)(index*10.0)<<endl;

      //should print 0 1 2 3 4 5 6 7 8 9, but prints 0 1 2 3 4 5 6 7 7 9 9  

I changed double to a float:

      float index;

      for(index=0.0;index<1.0;index+=0.1)

            cout<<(int)(index*10.0)<<endl;

      return 0;

and all went well, I don’t remember the exact reason ( the way float and double resides in memory + conversion issues to an int) but it’s obviously not a bug.

 


Comments (3)

  1. Me again says:

    >//should print 0 1 2 3 4 5 6 7 8 9, but prints 0 1 2 3 4 5 6 7 7 9 9

    Why "should" it print that?

    Eric Gunnerson recently posted a link to an article on "what every computer scientist should know about floating point arithmetic":

    http://blogs.gotdotnet.com/EricGu/permalink.aspx/8dc27f6a-2094-40a4-b5c0-ca92a718a7ee

  2. SBC says:

    I think it’s an issue with the double ‘addition’ – there is a very small value (DBL_EPS?) which is defined in ‘limits.h’ that addresses it. Basically, 1.0+DBL_EPS is <> 1.0.. So the correction would have to be in the increment counter of the ‘for loop’..

  3. SBC says:

    Addendum – the increment counter and the condition for loop exit..