avoid overflow in numeric.c:S_mulexp10() on VAX
authorPeter Prymmer <PPrymmer@factset.com>
Wed, 27 Jun 2001 19:25:49 +0000 (12:25 -0700)
committerJarkko Hietaniemi <jhi@iki.fi>
Thu, 28 Jun 2001 03:42:57 +0000 (03:42 +0000)
Message-ID: <Pine.OSF.4.10.10106271922120.465082-100000@aspara.forte.com>

p4raw-id: //depot/perl@10998

numeric.c

index 58b96d2..1aadce5 100644 (file)
--- a/numeric.c
+++ b/numeric.c
@@ -562,6 +562,14 @@ S_mulexp10(NV value, I32 exponent)
        negative = 1;
        exponent = -exponent;
     }
+#ifdef __VAX /* avoid %SYSTEM-F-FLTOVF_F sans VAXC$ESTABLISH */
+#  if defined(__DECC_VER) && __DECC_VER <= 50390006
+    /* __F_FLT_MAX_10_EXP - 5 == 33 */
+    if (!negative &&
+          (log10(value) + exponent) >= (__F_FLT_MAX_10_EXP - 5))
+        return NV_MAX;
+#  endif
+#endif
     for (bit = 1; exponent; bit <<= 1) {
        if (exponent & bit) {
            exponent ^= bit;