Confusion Concerning Numerical Equation

berni44 dlang at d-ecke.de
Sun Nov 17 07:01:19 UTC 2019


On Saturday, 16 November 2019 at 10:01:25 UTC, Avery Stupidman 
wrote:
> assert(angleDeg(sqrt(3.0)/2.0, 1.5) == 60.0); // Fails

On my computer the results are very close, that is:

import std.math: nextUp;

assert(nextUp(angleDeg(sqrt(3.0)/2.0, 1.5)) == 60.0); // OK


On Saturday, 16 November 2019 at 10:17:12 UTC, drug wrote:
> you can use something like approxEqual 
> https://dlang.org/library/std/math/approx_equal.html

With approxEqual, one needs to be very carefull. The default 
parameters allow for very odd results, accepting values to be 
equal, which are actually far apart considering the precision 
available; this is especially true, when using double or real.

For example, here are about 12 significant fractional digits 
involved, which are completely ignored:

assert(approxEqual(100.0,101.0)); // OK

I wrote a replacement with better handling of the default 
parameters [1], but it looks like no one wants to take the burden 
to review it, probably because that would involve to make a 
decision. (Or maybe it has some other reasons I do not see.)

[1] https://github.com/dlang/phobos/pull/7241


More information about the Digitalmars-d-learn mailing list