diff libcruft/slatec-fn/atanh.f @ 14392:d17237256856

Make SLATEC-FN atanh/erfc functions more tolerant about edge cases like numerical underflow or NaN values. * slatec-fn/atanh,f (ATANH): Returns infinity for +-1 and NaN for >1 * slatec-fn/datanh.f (DATANH): Likewise. * slatec-fn/erfc.f (ERFC): Returns NaN for Nan input. * slatec-fn/derfc.f (DERFC): Likewise.
author Michael Goffioul <michael.goffioul@gmail.com>
date Thu, 23 Feb 2012 09:12:47 +0000
parents 82be108cc558
children
line wrap: on
line diff
--- a/libcruft/slatec-fn/atanh.f	Wed Feb 22 20:06:05 2012 -0500
+++ b/libcruft/slatec-fn/atanh.f	Thu Feb 23 09:12:47 2012 +0000
@@ -57,8 +57,14 @@
       FIRST = .FALSE.
 C
       Y = ABS(X)
-      IF (Y .GE. 1.0) CALL XERMSG ('SLATEC', 'ATANH', 'ABS(X) GE 1', 2,
-     +   2)
+      IF (Y .GE. 1.0) THEN
+         IF (Y .GT. 1.0) THEN 
+            ATANH = (X - X) / (X - X)
+         ELSE
+            ATANH = X / 0.0
+         ENDIF
+         RETURN
+      ENDIF
 C
       IF (1.0-Y .LT. DXREL) CALL XERMSG ('SLATEC', 'ATANH',
      +   'ANSWER LT HALF PRECISION BECAUSE ABS(X) TOO NEAR 1', 1, 1)