Thread overview | ||||||
---|---|---|---|---|---|---|
|
August 25, 2012 float comparison | ||||
---|---|---|---|---|
| ||||
unittest { bool fuzzyCmp(float a, float b) { return abs(a-b) < 0.000001f; } float len1 = sqrt(8.0f); float len2 = sqrt(8.0f); assert(len1 == len2); // passes assert(fuzzyCmp(len1,sqrt(8.0f))); // passes assert(len1 == sqrt(8.0f)); // fails!! } The comparison of the float variable passes, but the comparison to the return value of the sqrt-function fails.?! |
August 25, 2012 Re: float comparison | ||||
---|---|---|---|---|
| ||||
Posted in reply to nocide | On Saturday, August 25, 2012 10:28:44 nocide wrote: > unittest { > bool fuzzyCmp(float a, float b) { > return abs(a-b) < 0.000001f; > } > float len1 = sqrt(8.0f); > float len2 = sqrt(8.0f); > assert(len1 == len2); // passes > assert(fuzzyCmp(len1,sqrt(8.0f))); // passes > assert(len1 == sqrt(8.0f)); // fails!! > } > > > The comparison of the float variable passes, but the comparison to the return value of the sqrt-function fails.?! Comparing floating point numbers with == is almost always the wrong thing to do. http://floating-point-gui.de/ - Jonathan M Davis |
August 25, 2012 Re: float comparison | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Am 25.08.2012 10:36, schrieb Jonathan M Davis:
> On Saturday, August 25, 2012 10:28:44 nocide wrote:
>> unittest {
>> bool fuzzyCmp(float a, float b) {
>> return abs(a-b) < 0.000001f;
>> }
>> float len1 = sqrt(8.0f);
>> float len2 = sqrt(8.0f);
>> assert(len1 == len2); // passes
>> assert(fuzzyCmp(len1,sqrt(8.0f))); // passes
>> assert(len1 == sqrt(8.0f)); // fails!!
>> }
>>
>>
>> The comparison of the float variable passes, but the comparison to the
>> return value of the sqrt-function fails.?!
>
> Comparing floating point numbers with == is almost always the wrong thing to
> do.
>
> http://floating-point-gui.de/
>
> - Jonathan M Davis
>
Many thanks!
nocide
|
August 25, 2012 Re: float comparison | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis:
> Comparing floating point numbers with == is almost always the wrong thing to do.
The second part of the answer is a suggestion to use std.math.feqrel.
Bye,
bearophile
|
Copyright © 1999-2021 by the D Language Foundation