! File TLHYPERBOLIC.TEXT provides test vectors for ! NCEG functions cosh, sinh, tanh, acosh, asinh, atanh. ! 01/08/02 reworked cases depending on Extended80 format. ! ! ! Tests of sinh(x) = x + x^3/3! + x^5/5! + ... ! ! NANs 3y d Q 0 OK Q 3y d -Q 0 OK -Q ! Infinities 3y d H 0 OK H 3y d -H 0 OK -H ! sinh of 0 is 0 with the same sign 3y d 0 0 OK 0 3y d -0 0 OK -0 ! ! sinh(tiny) is tiny + noise. ! Disabled <0e and >0e variants, since function is computed round-nearest always. 3y d E 0 x E 3y d Ei1 0 x Ei1 3y d Ep1 0 x Ep1 3y d Ep1i3 0 x Ep1i3 3y d Ed2 0 ux Ed2 3y d Ep1d5 0 x Ep1d5 3y d 0i1 0 ux 0i1 3y d 0i9 0 ux 0i9 ! ! sinh(-tiny) is -tiny - noise. 3y d -E 0 x -E 3y d -Ei1 0 x -Ei1 3y d -Ep1 0 x -Ep1 3y d -Ep1i3 0 x -Ep1i3 3y d -Ed2 0 ux -Ed2 3y d -Ep1d5 0 x -Ep1d5 3y d -0i1 0 ux -0i1 3y d -0i9 0 ux -0i9 ! ! sinh(+large) overflows (positive) 3y d 1p14 0 ox H 3y d Hm1 0 ox H ! ! sinh(-large) overflows (negative) 3y d -1p14 0 ox -H 3y d -Hm1 0 ox -H ! ! ! ! Tests of cosh(x) = 1 + x^2/2! + x^4/4! + ... ! ! NANs 3x d Q 0 OK Q ! 3x e -Q 0 OK -Q 3x d -Q 0 OK Q ! Infinities 3x d H 0 OK H 3x d -H 0 OK H ! cosh(0) = 1 3x d 0 0 OK 1 3x d -0 0 OK 1 ! cosh(tiny) is 1 + noise 3x d E 0 x 1 3x d Ei1 0 x 1 3x d Ep1 0 x 1 3x d Ep1i3 0 x 1 3x d Ed2 0 x 1 3x d Ep1d5 0 x 1 3x d 0i1 0 x 1 3x d 0i9 0 x 1 ! cosh(-tiny) is 1 + noise 3x d -E 0 x 1 3x d -Ei1 0 x 1 3x d -Ep1 0 x 1 3x d -Ep1i3 0 x 1 3x d -Ed2 0 x 1 3x d -Ep1d5 0 x 1 3x d -0i1 0 x 1 3x d -0i9 0 x 1 ! ! cosh of small values crossing the threshold of + or -2^(-26) 3x d 1m26 0 x 1 3x d -1m26 0 x 1 3x d 1m25 0 x 1i2 3x d -1m25 0 x 1i2 3x d 1m24 0 x 1i8 3x d -1m24 0 x 1i8 ! ! cosh(huge) overflows (positive) 3x d 1p14 0 ox H 3x d Hm1 0 ox H ! ! cosh(-huge) overflows (positive) 3x d -1p14 0 ox H 3x d -Hm1 0 ox H ! ! ! Tests of tanh(x) = x - x^3/3 + 2*x^5/15 - ... ! ! NANs 3z d Q 0 OK Q 3z d -Q 0 OK -Q ! Infinities yield + or -1 3z d H 0 OK 1 3z d -H 0 OK -1 ! tanh of 0 is 0 with the same sign! 3z d 0 0 OK 0 3z d -0 0 OK -0 ! ! tanh(tiny) is tiny - noise. 3z d E 0 x E 3z d Ei1 0 x Ei1 3z d Ep1 0 x Ep1 3z d Ep1i3 0 x Ep1i3 3z d Ed2 0 ux Ed2 3z d Ep1d5 0 x Ep1d5 3z d 0i1 0 ux 0i1 3z d 0i9 0 ux 0i9 ! ! tanh(-tiny) is -tiny + noise. 3z d -E 0 x -E 3z d -Ei1 0 x -Ei1 3z d -Ep1 0 x -Ep1 3z d -Ep1i3 0 x -Ep1i3 3z d -Ed2 0 ux -Ed2 3z d -Ep1d5 0 x -Ep1d5 3z d -0i1 0 ux -0i1 3z d -0i9 0 ux -0i9 ! ! tanh(huge) yields +1 3z d 1p14 0 x 1 3z d Hm1 0 x 1 ! ! tanh(-huge) yields -1 3z d -1p14 0 x -1 3z d -Hm1 0 x -1 ! ! ! ! Tests of acosh(x) ! ! NANs 3u d Q 0 OK Q 3u d -Q 0 OK -Q ! acosh(+INFINITY) returns +INFINITY 3u d H 0 OK H ! acosh(1) returns 0 3u d 1 0 OK 0 ! acosh(x) returns a NaN and signals invalid for x < 1 3u d 1d1 0 i Q 3u d 1m1 0 i Q 3u d E 0 i Q 3u d Ed1 0 i Q 3u d 0i7 0 i Q 3u d 0i1 0 i Q 3u d 0 0 i Q 3u d -0 0 i Q 3u d -0i1 0 i Q 3u d -0i7 0 i Q 3u d -Ed1 0 i Q 3u d -E 0 i Q 3u d -1m1 0 i Q 3u d -1i1 0 i Q 3u d -Hd1 0 i Q 3u d -H 0 i Q ! some midrange cases (to nearest only) 3u =d 1p16 0 x $4002BC8939774AEC7147-1 3u =d 1p32 0 x $4003B6FDA8B7905DF579 ! ! ! ! Tests of asinh(x) ! ! NANs 3v d Q 0 OK Q 3v d -Q 0 OK -Q ! asinh(x) returns x when x is infinite 3v d H 0 OK H 3v d -H 0 OK -H ! asinh(x) returns x when x is zero 3v d 0 0 OK 0 3v d -0 0 OK -0 ! asinh(x) returns x - noise when x is positive and tiny (< 2^(-32)) 3v d Ei1 0 x Ei1 3v d Ep1 0 x Ep1 3v d Ep1i3 0 x Ep1i3 3v d Ed2 0 ux Ed2 3v d 0i1 0 ux 0i1 3v d 0i9 0 ux 0i9 ! asinh(x) returns x + noise when x is negative and tiny in magnitude (< 2^(-32)) 3v d -Ei1 0 x -Ei1 3v d -Ep1 0 x -Ep1 3v d -Ep1i3 0 x -Ep1i3 3v d -Ed2 0 ux -Ed2 3v d -Ep1d5 0 x -Ep1d5+2 3v d -0i1 0 ux -0i1 3v d -0i9 0 ux -0i9 ! some midrange cases for asinh(to nearest only) ! 3v =e 1m16 0 x $3FEEFFFFFFFFD5555555+1 4v =d 0x3ef00000 0x00000000 0x0 0x0 x 0x3eefffff 0xfffaaaab ! 3v =e -1m16 0 x $BFEEFFFFFFFFD5555555+1 4v =d 0xbef00000 0x00000000 0x0 0x0 x 0xbeefffff 0xfffaaaab 3v =d 1p16 0 x $4002BC89397752EC7147 3v =d -1p16 0 x $C002BC89397752EC7147 3v =d 1p32 0 x $4003B6FDA8B7905DF579 3v =d -1p32 0 x $C003B6FDA8B7905DF579 ! ! ! ! Tests of atanh(x) = x + x^3/3 + x^5/5 + ... for abs(x) <= 1 ! ! NANs 3w d Q 0 OK Q 3w d -Q 0 OK -Q ! Infinities are invalid 3w d H 0 i Q 3w d -H 0 i Q ! atanh of 0 is 0 with the same sign! 3w d 0 0 OK 0 3w d -0 0 OK -0 ! atanh(x) is invalid if abs(x) > 1 3w d 1i1 0 i Q 3w d -1i1 0 i Q 3w d 1i3 0 i Q 3w d -1i3 0 i Q 3w d 2d1 0 i Q 3w d -2d1 0 i Q 3w d Hm1 0 i Q 3w d -Hm1 0 i Q 3w d Hd1 0 i Q 3w d -Hd1 0 i Q ! ! atanh(tiny) is tiny + noise. 3w d E 0 x E 3w d Ei1 0 x Ei1 3w d Ep1 0 x Ep1 3w d Ep1i3 0 x Ep1i3 3w d Ed2 0 ux Ed2 3w d Ep1d5 0 x Ep1d5 3w d 0i1 0 ux 0i1 3w d 0i9 0 ux 0i9 ! ! atanh(-tiny) is -tiny - noise. 3w d -E 0 x -E 3w d -Ei1 0 x -Ei1 3w d -Ep1 0 x -Ep1 3w d -Ep1i3 0 x -Ep1i3 3w d -Ed2 0 ux -Ed2 3w d -Ep1d5 0 x -Ep1d5 3w d -0i1 0 ux -0i1 3w d -0i9 0 ux -0i9 ! ! atanh(1) yields +inf with divide-by-zero 3w d 1 0 z H ! ! atanh(-1) yields -inf with divide-by-zero 3w d -1 0 z -H