Haven't you read yet what I referred to in the post#2?
Printable View
sois the best and shortest way?Code:if ( fabsf(c - a) < 0.000001 )
Again: did you read about FP arithmetic?
Before you ask more questions, please read this:
http://www.parashift.com/c++-faq-lit...html#faq-29.16
http://www.parashift.com/c++-faq-lit...html#faq-29.17
http://www.parashift.com/c++-faq-lit...html#faq-29.18
Computers work in binary, not decimal. This means that the decimal numbers you're trying to use must be converted to binary. Do you know how to convert a decimal floating point value to a binary floating point value? If you do, then you will see why decimal fractions cannot have exact binary representations unless they are a sum of inverse powers of 2.
If you want exact numbers, then don't use float or double. Use a class that represents arbitrary precision numbers, and there are many of them out there.
Regards,
Paul McKenzie
Well, this code will not work:
Never use floats or doubles as loop counters. Never.Code:for (float a = ap; a <= ag; a += az)
The reason is that you cannot guarantee how many times that loop will execute. It could execute 1 more time than expected, and the reason was explained by everyone so far -- floating point computations are not exact.
Always use integers as loop counters. This guarantees that the loop will execute the exact number of times you expect. For example, if you know you should loop from 0.01 to 0.1 then you write this:
Now the loop is guaranteed to loop 100 times. The bottom line is however you do it, the goal is to normalize all "counted" loops to use integers as loop counters.Code:for (int i = 1; i <= 100; ++i)
{
double myValue = i / 100.0;
// then you use myValue in the loop, not i
//...
}
Regards,
Paul McKenzie