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