You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2005/09/20 19:33:30 UTC

svn commit: r290491 - /incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp

Author: sebor
Date: Tue Sep 20 10:33:27 2005
New Revision: 290491

URL: http://svn.apache.org/viewcvs?rev=290491&view=rev
Log:
2005-09-20  Martin Sebor  <se...@roguewave.com>

	STDCXX-38
	* INFINITY.cpp: Avoided floating point arithmetic on denormalized
	numbers when trapping is enabled (i.e., _RWSTD_NO_DBL_TRAPS is not
	#defined).


Modified:
    incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp

Modified: incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp?rev=290491&r1=290490&r2=290491&view=diff
==============================================================================
--- incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp (original)
+++ incubator/stdcxx/trunk/etc/config/src/INFINITY.cpp Tue Sep 20 10:33:27 2005
@@ -766,13 +766,26 @@
     printf ("// computed infinities and NANs for a %s endian architecture\n",
             e == big_endian ? "big" : "little");
 
-#else
+    const int flt_has_denorm = 0.0f != f_den.val;
+    const int dbl_has_denorm = 0.0  != d_den.val;
+
+#  ifndef _RWSTD_NO_LONG_DOUBLE
+
+    const int ldbl_has_denorm = 0.0L != l_den.val;
+
+#  endif   // _RWSTD_NO_LONG_DOUBLE
+
+#else   // if !defined (_RWSTD_NO_DBL_TRAPS)
 
     printf ("// IEEE 754 infinities and NANs for a %s endian architecture\n"
             "// (values not computed due to floating exception trapping)\n",
             e == big_endian ? "big" : "little");
 
-#endif
+    const int flt_has_denorm  = 1;
+    const int dbl_has_denorm  = 1;
+    const int ldbl_has_denorm = 1;
+
+#endif   // _RWSTD_NO_DBL_TRAPS
 
     flt_bits f_inf  = flt_infinity ();
     flt_bits f_qnan = flt_qnan ();
@@ -784,7 +797,7 @@
     print ("#define _RWSTD_FLT_SNAN_BITS ", &f_snan, sizeof f_snan);
     print ("#define _RWSTD_FLT_DENORM_MIN_BITS ", &f_den, sizeof f_den);
 
-    printf ("#define _RWSTD_FLT_HAS_DENORM  %d\n", f_den.val ? 1 : 0);
+    printf ("#define _RWSTD_FLT_HAS_DENORM  %d\n", flt_has_denorm);
 
     dbl_bits d_inf  = dbl_infinity ();
     dbl_bits d_qnan = dbl_qnan ();
@@ -796,7 +809,7 @@
     print ("#define _RWSTD_DBL_SNAN_BITS ", &d_snan, sizeof d_snan);
     print ("#define _RWSTD_DBL_DENORM_MIN_BITS ", &d_den, sizeof d_den);
 
-    printf ("#define _RWSTD_DBL_HAS_DENORM  %d\n", d_den.val ? 1 : 0);
+    printf ("#define _RWSTD_DBL_HAS_DENORM  %d\n", dbl_has_denorm);
 
 #ifndef _RWSTD_NO_LONG_DOUBLE
 
@@ -810,7 +823,7 @@
     print ("#define _RWSTD_LDBL_SNAN_BITS ", &l_snan, sizeof l_snan);
     print ("#define _RWSTD_LDBL_DENORM_MIN_BITS ", &l_den, sizeof l_den);
 
-    printf ("#define _RWSTD_LDBL_HAS_DENORM  %d\n", l_den.val ? 1 : 0);
+    printf ("#define _RWSTD_LDBL_HAS_DENORM  %d\n", ldbl_has_denorm);
 
 #endif   // _RWSTD_NO_LONG_DOUBLE