== Quote from Lars T. Kyllingstad (pub...@kyllingen.nospamnet)'s article > (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
What about when the values are numbers a tiny bit different than zero, and should be exactly zero except for a small amount of numerical fuzz? I think absolute error needs to be taken into account by default, too.