TVhyperbolic.3.TEXT [plain text]
! File TLHYPERBOLIC.TEXT provides test vectors for
! NCEG functions cosh, sinh, tanh, acosh, asinh, atanh.
! <scp> 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.
! <scp> 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
! <scp> 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)
! <scp> 3v =e 1m16 0 x $3FEEFFFFFFFFD5555555+1
4v =d 0x3ef00000 0x00000000 0x0 0x0 x 0x3eefffff 0xfffaaaab
! <scp> 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