type comparisons
Bill Baxter
dnewsgroup at billbaxter.com
Sat Jan 26 15:17:50 PST 2008
Denton Cockburn wrote:
> Jérôme M. Berger Wrote:
>
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Denton Cockburn wrote:
>>> On Sat, 26 Jan 2008 18:36:41 +0000, BCS wrote:
>>>
>>>> Reply to Denton,
>>>>
>>>>> [quoted text muted]
>>>> rounding error?
>>>>
>>>> rounding 0.6584 (base 10) to real and then converting to double may round
>>>> different than rounding it directly to double.
>>> I can't think of a reason that would be acceptable.
>>> This means I can't reliably do operations with converted reals/doubles :(
>>>
>>> This is also weird:
>>> double a = 0.65;
>>> real b = a + 0.1;
>> Here, you're computing "a + 0.1" using double, then converting it
>> to real
>>
>>> b -= 0.1;
>>> assert(b == a); // fails
>>>
>>> real c = a;
>>> c += 0.1;
>> Here, you converted a to real, then you add 0.1 using real.
>>
>>> c -= 0.1;
>>> assert(c == a); // passes
>> Which could explain that rounding errors wind up different and make
>> one assertion pass while the other fails.
>>
>> Jerome
>> - --
>> +------------------------- Jerome M. BERGER ---------------------+
>> | mailto:jeberger at free.fr | ICQ: 238062172 |
>> | http://jeberger.free.fr/ | Jabber: jeberger at jabber.fr |
>> +---------------------------------+------------------------------+
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.7 (GNU/Linux)
>>
>> iD8DBQFHm4y1d0kWM4JG3k8RAgfQAKC3LwsQfklEVT+cP2w3HrR/xtK6JACfdPr9
>> PQIwRTbf2zyhpst9zdeZn9s=
>> =RA4Q
>> -----END PGP SIGNATURE-----
>
> The problem I'm having is that we are comparing the same numerical value for equality, and getting a (logically) false result.
One tenth is not exactly representable in floating point. Therefore you
get rounding errors the moment you try to store .1 in a
float/double/real. real can represent 1/10 a bit more accurately than
double. So .1 as a double, then cast to a real is not quite the same as
.1 that started as a real.
Try .125 or 0.0625 and you'll get a good answer. But .1 is bad news for
floating point.
--bb
More information about the Digitalmars-d-learn
mailing list