Comparing floats and doubles in C++ | SoloLearn: Learn to code for FREE!

+2

Comparing floats and doubles in C++

I want to know why the output is different when I'm comparing a float and a double. Only the values are different. Here's the code: https://code.sololearn.com/czNb74ZGL18l/#cpp

5/16/2020 9:24:42 PM

CeePlusPlus

3 Answers

New Answer

+6

Hey there , Yeh its seems so strange but the thing is computer is still not very good at floating point numbers and uses lot of optimization and rounding for calculations using floating number that's why sometimes these equality operator doesn't work as intended The exact reason is to do with the *Machine Epsilon* Machine Epsilon is the smallest number greater than 1.0 that is not equal to 1.0 ( for example if machine Epsilon is 0.1 then you can only have 1.1 , 1.2 or so on you can not have 1.05 or something else) this is machine dependent practically it's very very small You can check the value of machine Epsilon by this expression float f; f = std::numeric_limits<float>::epsilon(); double d; d = std::numeric_limits<double>::epsilon(); So this is it . If you want to be exact and be safe Just use this function instead // Include iostream and cmath double epsilon = std::numeric_limits<double>::epsilon() bool CMP(double a, double b) { return fabs(a-b) < epsilon ; }

+7

It's due to the resolution and precision differences between floats and doubles. This introduces floating point errors in the calculations.