diff --git a/src/lisp/fdlibm.h b/src/lisp/fdlibm.h
index abd6e80d76d82c8cbbc7cb5902e58cc4d15550c5..8cc4dd253994d22f71d797bc1985ea758521631a 100644
--- a/src/lisp/fdlibm.h
+++ b/src/lisp/fdlibm.h
@@ -61,7 +61,8 @@ enum FDLIBM_EXCEPTION {
   FDLIBM_DIVIDE_BY_ZERO,
   FDLIBM_UNDERFLOW,
   FDLIBM_OVERFLOW,
-  FDLIBM_INVALID
+  FDLIBM_INVALID,
+  FDLIBM_INEXACT
 };
 
 extern double fdlibm_setexception(double x, enum FDLIBM_EXCEPTION);
diff --git a/src/lisp/s_asinh.c b/src/lisp/s_asinh.c
index dc99e5b943a4fac47e2d44596481eb7e0da05522..5c33cbaf66dbb42e183bf22af01f4bb31d8421c9 100644
--- a/src/lisp/s_asinh.c
+++ b/src/lisp/s_asinh.c
@@ -59,7 +59,12 @@ huge=  1.00000000000000000000e+300;
         }
         
 	if(ix< 0x3e300000) {	/* |x|<2**-28 */
-	    if(huge+x>one) return x;	/* return x inexact except 0 */
+            /* return x inexact except 0 */
+            if (x != 0) {
+                fdlibm_setexception(x, FDLIBM_INEXACT);
+            }
+
+            return x;
 	} 
 	if(ix>0x41b00000) {	/* |x| > 2**28 */
 	    w = __ieee754_log(fabs(x))+ln2;
diff --git a/src/lisp/setexception.c b/src/lisp/setexception.c
index fc2bcc1d4841ed108a8d36535b4609b92e5236b5..e70c3f901555f6ab20072e932c94790cb1067049 100644
--- a/src/lisp/setexception.c
+++ b/src/lisp/setexception.c
@@ -88,6 +88,10 @@ fdlibm_setexception(double x, enum FDLIBM_EXCEPTION type)
           
           break;
       }
+    case FDLIBM_INEXACT:
+        feraiseexcept(FE_INEXACT);
+        ret = x;
+        break;
     default:
       /* Shouldn't happen! */
       ret = 0.0;