Re: C programing problem where <= is interpreted as < when using GCC 11.2.0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2021-10-14 at 15:20 +0000, frijolithedog 1 via Gcc-help wrote:
> I am having a C programing problem where <= is interpreted as < when
> using GCC 11.2.0
> 
> I was debugging a larger program which I broke down into smaller
> sections of code and I noticed
> the following code was not working correctly:
> 
> #include <stdio.h>
> #include <math.h>
> #include <float.h>​
> 
> int main(void)
>  {
>        float n, step;
> 
>        step = 0.1;
> 
>            for (n = 2; n <= 10; n = n + step )
>            printf("%3.4f\n", n );                     /*  This stops
> at 9.9000 and not at 10.0000  */
> 
>  }
> 
> I tried the above code only using the following include statement
> #include <stdio.h>
> but the result was the same.

It's because 0.1 is not something can be represented precisely using
float: it's binary representation is infinite.  The float-type value
closet to 0.1 is 0.100000001490116119384765625, which is slightly larger
than 0.1.

Generally you shouldn't use a floating-point value as a loop iterator
unless you really know what you are doing.
-- 
Xi Ruoyao <xry111@xxxxxxxxxxxxxxxx>
School of Aerospace Science and Technology, Xidian University



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux