approxEqual() has fooled me for a long time...
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Wed Oct 20 03:32:06 PDT 2010
(This message was originally meant for the Phobos mailing list, but for
some reason I am currently unable to send messages to it*. Anyway, it's
probably worth making others aware of this as well.)
In my code, and in unittests in particular, I use std.math.approxEqual()
a lot to check the results of various computations. If I expect my
result to be correct to within ten significant digits, say, I'd write
assert (approxEqual(result, expected, 1e-10));
Since results often span several orders of magnitude, I usually don't
care about the absolute error, so I just leave it unspecified. So far,
so good, right?
NO!
I just discovered today that the default value for approxEqual's default
absolute tolerance is 1e-5, and not zero as one would expect. This
means that the following, quite unexpectedly, succeeds:
assert (approxEqual(1e-10, 1e-20, 0.1));
This seems completely illogical to me, and I think it should be fixed
ASAP. Any objections?
Changing it to zero turned up fifteen failing unittests in SciD. :(
-Lars
* Regarding the mailing list problem, Thunderbird is giving me the
following message:
RCPT TO <phobos at puremagic.com> failed:
<phobos at puremagic.com>: Recipient address rejected:
User unknown in relay recipient table
Are anyone else on the lists seeing this, or is the problem with my mail
server?
More information about the Digitalmars-d
mailing list