atanh.f 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. *DECK ATANH
  2. FUNCTION ATANH (X)
  3. C***BEGIN PROLOGUE ATANH
  4. C***PURPOSE Compute the arc hyperbolic tangent.
  5. C***LIBRARY SLATEC (FNLIB)
  6. C***CATEGORY C4C
  7. C***TYPE SINGLE PRECISION (ATANH-S, DATANH-D, CATANH-C)
  8. C***KEYWORDS ARC HYPERBOLIC TANGENT, ATANH, ELEMENTARY FUNCTIONS,
  9. C FNLIB, INVERSE HYPERBOLIC TANGENT
  10. C***AUTHOR Fullerton, W., (LANL)
  11. C***DESCRIPTION
  12. C
  13. C ATANH(X) computes the arc hyperbolic tangent of X.
  14. C
  15. C Series for ATNH on the interval 0. to 2.50000D-01
  16. C with weighted error 6.70E-18
  17. C log weighted error 17.17
  18. C significant figures required 16.01
  19. C decimal places required 17.76
  20. C
  21. C***REFERENCES (NONE)
  22. C***ROUTINES CALLED CSEVL, INITS, R1MACH, XERMSG
  23. C***REVISION HISTORY (YYMMDD)
  24. C 770401 DATE WRITTEN
  25. C 890531 Changed all specific intrinsics to generic. (WRB)
  26. C 890531 REVISION DATE from Version 3.2
  27. C 891214 Prologue converted to Version 4.0 format. (BAB)
  28. C 900315 CALLs to XERROR changed to CALLs to XERMSG. (THJ)
  29. C 900326 Removed duplicate information from DESCRIPTION section.
  30. C (WRB)
  31. C***END PROLOGUE ATANH
  32. DIMENSION ATNHCS(15)
  33. LOGICAL FIRST
  34. SAVE ATNHCS, NTERMS, DXREL, SQEPS, FIRST
  35. DATA ATNHCS( 1) / .0943951023 93195492E0 /
  36. DATA ATNHCS( 2) / .0491984370 55786159E0 /
  37. DATA ATNHCS( 3) / .0021025935 22455432E0 /
  38. DATA ATNHCS( 4) / .0001073554 44977611E0 /
  39. DATA ATNHCS( 5) / .0000059782 67249293E0 /
  40. DATA ATNHCS( 6) / .0000003505 06203088E0 /
  41. DATA ATNHCS( 7) / .0000000212 63743437E0 /
  42. DATA ATNHCS( 8) / .0000000013 21694535E0 /
  43. DATA ATNHCS( 9) / .0000000000 83658755E0 /
  44. DATA ATNHCS(10) / .0000000000 05370503E0 /
  45. DATA ATNHCS(11) / .0000000000 00348665E0 /
  46. DATA ATNHCS(12) / .0000000000 00022845E0 /
  47. DATA ATNHCS(13) / .0000000000 00001508E0 /
  48. DATA ATNHCS(14) / .0000000000 00000100E0 /
  49. DATA ATNHCS(15) / .0000000000 00000006E0 /
  50. DATA FIRST /.TRUE./
  51. C***FIRST EXECUTABLE STATEMENT ATANH
  52. IF (FIRST) THEN
  53. NTERMS = INITS (ATNHCS, 15, 0.1*R1MACH(3))
  54. DXREL = SQRT (R1MACH(4))
  55. SQEPS = SQRT (3.0*R1MACH(3))
  56. ENDIF
  57. FIRST = .FALSE.
  58. C
  59. Y = ABS(X)
  60. IF (Y .GE. 1.0) CALL XERMSG ('SLATEC', 'ATANH', 'ABS(X) GE 1', 2,
  61. + 2)
  62. C
  63. IF (1.0-Y .LT. DXREL) CALL XERMSG ('SLATEC', 'ATANH',
  64. + 'ANSWER LT HALF PRECISION BECAUSE ABS(X) TOO NEAR 1', 1, 1)
  65. C
  66. ATANH = X
  67. IF (Y.GT.SQEPS .AND. Y.LE.0.5) ATANH = X*(1.0 + CSEVL (8.*X*X-1.,
  68. 1 ATNHCS, NTERMS))
  69. IF (Y.GT.0.5) ATANH = 0.5*LOG((1.0+X)/(1.0-X))
  70. C
  71. RETURN
  72. END