History log of /netbsd-src/tests/lib/libm/t_sqrt.c (Results 1 – 8 of 8)
Revision Date Author Comments
# a8a8e5f5 07-Nov-2018 riastradh <riastradh@NetBSD.org>

Fix up libm tests.

- Fix up last few digits of a lot of known-answer tests.

Confirmed with GNU mpfr to 200 bits of precision and cross-checked
with whatever libm Ubuntu ships with.

- Test rela

Fix up libm tests.

- Fix up last few digits of a lot of known-answer tests.

Confirmed with GNU mpfr to 200 bits of precision and cross-checked
with whatever libm Ubuntu ships with.

- Test relative error, not absolute error.

- Set bounds in terms of *_EPSILON, not magic numbers.

*_EPSILON is twice the largest relative error of a correctly
rounded operation, and equal to the largest relative error of an
operation with up to 1ulp error.

Most of the operations we're testing are not correctly rounded, but
they ought to be no more than 1ulp away. For the few cases where
that's not a priori clear (like comparing cbrt and pow(x, 1/3)),
use twice *_EPSILON to allow some leeway.

- Write the success condition positively as error <= eps.

This comes out false if the result is a NaN, meaning failure. In
contrast, if we write error > eps for the _failure_ condition, then
if the result is a NaN, it will also come out false, but meaning
success, which is not what we want.

- Fix the trigonometric test cases near bad spots.

sin(pi - d) for nonzero d is not zero; it is d + O(d^3). pi is not
a floating-point number, so these results should be approximately
the nonzero error of our approximation to pi. Likewise with
cos(pi/2 - d) and tan(pi + d).

(Yes, I know the sin _function_ is ill-conditioned near pi so you
shouldn't pass approximate inputs near there, but that's separate
from whether a sin _implementation_ gives an answer that is wrong
by quintillions of ulps.)

Since on x86 (i386 and amd64 alike) we currently use x87 hardware
trigonometric instructions, which are bad, these are marked xfail
on x86 for now until we switch to software implementations (coming
soon to a repository near you).

- Use %.8g, %.17g, %.35g to print float, double, long double in failures.

This should be enough to identify the problematic outputs and/or
reproduce the computation, even if long double is binary128 with
115 bits of precision.

If there are any new libm test failures after this, tell me what
architecture you're on and send me the atf output and I'll try to
figure it out.

show more ...


# 49f7ef9b 12-Mar-2014 martin <martin@NetBSD.org>

Avoid double constants out of range


# 29ebc681 03-Mar-2014 martin <martin@NetBSD.org>

Remove all cargo-cult #ifndef __vax__ from the tests, that just paper
over bugs in the vax libm.


# f758bf64 22-Nov-2013 martin <martin@NetBSD.org>

Adjust expected epsilon for sqrtl <-> powl comparisions for defects in
powl (which actually is pow for now)


# f63f9867 19-Nov-2013 joerg <joerg@NetBSD.org>

Add cbrtl(3) and sqrtl(3), from FreeBSD.


# f91f485f 13-Feb-2012 jruoho <jruoho@NetBSD.org>

Fix wrong error failure message.


# ea28fb54 19-Nov-2011 mlelstv <mlelstv@NetBSD.org>

The compiler is allowed to use intermediate higher precision for float
arithmetic, which may cause differences smaller than float precision
but still much larger than eps = 1e-30.
Forcing intermediat

The compiler is allowed to use intermediate higher precision for float
arithmetic, which may cause differences smaller than float precision
but still much larger than eps = 1e-30.
Forcing intermediate results to volatile variables removes the excess
precision.

show more ...


# 9a2c9f32 16-Oct-2011 jruoho <jruoho@NetBSD.org>

Basic checks for the root functions.