+ 3

C - Comparing a float

Consider this snippet of code: //float y = 0.1; float y = 1.0; if(y == 1.0){ printf("equal"); } else { printf("NOT equal"); } Why if I assign y = 0.1 and compare with 0.1 is "NOT equal, whilst if I assign y = 1.0 and compare with 1.0 is "equal"?

25th Jan 2020, 7:29 PM
Paolo De Nictolis
Paolo De Nictolis - avatar
3 Answers
+ 6
It's because y is a float and a usual floating point number is stored as double. If you'd use double y instead you won't notice the issue. You could also write y == 0.1f to explicitly declare 0.1 to be a float. The reason behind this: 1.0 is stored as just zeros both in floats and doubles (the bit for the 1 is left out in order to store more numbers within floats and doubles). Other numbers however differ in their representation as float or double.
25th Jan 2020, 7:49 PM
Aaron Eberhardt
Aaron Eberhardt - avatar
+ 5
Try assigning numbers as a float by doing 0.1f when you do just 0.1 it's a double
25th Jan 2020, 7:45 PM
Gevork Bagratyan
+ 2
It is a Boolean == as true or false or in your code equal or NOT equal .01 == 1.0 //false or NOT equal 1.0 == 1.0 //true or equal https://docs.microsoft.com/en-us/cpp/cpp/equality-operators-equal-equal-and-exclpt-equal?view=vs-2019
25th Jan 2020, 7:43 PM
BroFar
BroFar - avatar