-
October 2nd, 2011, 08:34 AM
#16
Re: 0 isn't 0 in C++ math
Originally Posted by justutiz
when add one time its true, but when you do it with cycle it looks something like this
a = -0.1 + 0.01000000001 and so on
and then you compare 0 with a it is looks something like this 0 != 0.0000000000001
Haven't you read yet what I referred to in the post#2?
Victor Nijegorodov
-
October 2nd, 2011, 08:45 AM
#17
Re: 0 isn't 0 in C++ math
so
Code:
if ( fabsf(c - a) < 0.000001 )
is the best and shortest way?
-
October 2nd, 2011, 08:49 AM
#18
Re: 0 isn't 0 in C++ math
Originally Posted by justutiz
so
Code:
if ( fabsf(c - a) < 0.000001 )
is the best and shortest way?
I'd say it is the only way. The question is only about this 'delta' value. In some case your choice with 0.000001 can work, in other - not. It all depends on the problem / values you are working on / with.
Victor Nijegorodov
-
October 2nd, 2011, 08:52 AM
#19
Re: 0 isn't 0 in C++ math
Originally Posted by VictorN
I'd say it is the only way. The question is only about this 'delta' value. In some case your choice with 0.000001 can work, in other - not. It all depends on the problem / values you are working on / with.
so it is posible to make working with all values, if az i take 0.000000001 then it is not working, so i need to add more 0.00000000000000001 in compare, it is other way?
-
October 2nd, 2011, 08:56 AM
#20
Re: 0 isn't 0 in C++ math
Again: did you read about FP arithmetic?
Victor Nijegorodov
-
October 2nd, 2011, 09:37 AM
#21
Re: 0 isn't 0 in C++ math
Originally Posted by justutiz
so it is posible to make working with all values, if az i take 0.000000001 then it is not working, so i need to add more 0.00000000000000001 in compare, it is other way?
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
Last edited by Paul McKenzie; October 2nd, 2011 at 09:39 AM.
-
October 2nd, 2011, 09:41 AM
#22
Re: 0 isn't 0 in C++ math
Originally Posted by VictorN
Again: did you read about FP arithmetic?
Yes, but dont understand everything. I just need to do a program in few days. This is my first program and I am still learning everything.
-
October 2nd, 2011, 09:47 AM
#23
Re: 0 isn't 0 in C++ math
Originally Posted by justutiz
Yes, but dont understand everything. I just need to do a program in few days. This is my first program and I am still learning everything.
Well, this code will not work:
Code:
for (float a = ap; a <= ag; a += az)
Never use floats or doubles as loop counters. Never.
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:
Code:
for (int i = 1; i <= 100; ++i)
{
double myValue = i / 100.0;
// then you use myValue in the loop, not i
//...
}
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.
Regards,
Paul McKenzie
Last edited by Paul McKenzie; October 2nd, 2011 at 09:52 AM.
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|