This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
infnan: introduce NV_MANT_BITS
authorJarkko Hietaniemi <jhi@iki.fi>
Fri, 27 Feb 2015 21:57:52 +0000 (16:57 -0500)
committerJarkko Hietaniemi <jhi@iki.fi>
Fri, 12 Jun 2015 13:57:23 +0000 (09:57 -0400)
(the real bits, not including possible implicit bit)

perl.h

diff --git a/perl.h b/perl.h
index aa1714c..6e44562 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -6630,6 +6630,21 @@ extern void moncontrol(int);
 #  endif
 #endif
 
 #  endif
 #endif
 
+/* NV_MANT_BITS is the number of _real_ mantissa bits in an NV.
+ * For the standard IEEE 754 fp this number is usually one less that
+ * *DBL_MANT_DIG because of the implicit (aka hidden) bit, which isn't
+ * real.  For the 80-bit extended precision formats (x86*), the number
+ * of mantissa bits... depends. For normal floats, it's 64.  But for
+ * the inf/nan, it's different (zero for inf, 61 for nan).
+ * NV_MANT_BITS works for normal floats. */
+#ifdef USE_QUADMATH /* IEEE 754 128-bit */
+#  define NV_MANT_BITS (FLT128_MANT_DIG - 1)
+#elif NVSIZE == DOUBLESIZE
+#  define NV_MANT_BITS DOUBLEMANTBITS
+#elif NVSIZE == LONG_DOUBLESIZE
+#  define NV_MANT_BITS LONGDBLMANTBITS
+#endif
+
 /*
 
    (KEEP THIS LAST IN perl.h!)
 /*
 
    (KEEP THIS LAST IN perl.h!)