FloatE has 24 bits of precision, but Mac OS reports it as having 6 significant digits. Unluckily, 2.71828 is not enough to print "e" correctly, for example. We need 2.7182818, i.e. ceil (24 * log10 2) digits of precision.

This patch fixes it.

Paolo
2007-05-24  Paolo Bonzini  <[EMAIL PROTECTED]>

        * libgst/dict.c: Don't trust {FLT,DBL,LDBL}_DIG.

--- orig/libgst/dict.c
+++ mod/libgst/dict.c
@@ -1118,7 +1118,7 @@ init_c_symbols ()
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CDoubleNaN"),
                    floatd_new ((double) NAN));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CDoubleDigits"),
-                   FROM_INT (DBL_DIG));
+                   FROM_INT (ceil (DBL_MANT_DIG) * 0.301029995663981));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CDoubleBinaryDigits"),
                    FROM_INT (DBL_MANT_DIG));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CDoubleMinExp"),
@@ -1139,7 +1139,7 @@ init_c_symbols ()
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CFloatMax"),
                    floate_new (FLT_MAX));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CFloatDigits"),
-                   FROM_INT (FLT_DIG));
+                   FROM_INT (ceil (FLT_MANT_DIG) * 0.301029995663981));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CFloatBinaryDigits"),
                    FROM_INT (FLT_MANT_DIG));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CFloatMinExp"),
@@ -1160,7 +1160,7 @@ init_c_symbols ()
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CLongDoubleMax"),
                    floatq_new (LDBL_MAX));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CLongDoubleDigits"),
-                   FROM_INT (LDBL_DIG));
+                   FROM_INT (ceil (LDBL_MANT_DIG) * 0.301029995663981));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string 
("CLongDoubleBinaryDigits"),
                    FROM_INT (LDBL_MANT_DIG));
   NAMESPACE_AT_PUT (cSymbolsOOP, _gst_intern_string ("CLongDoubleMinExp"),
_______________________________________________
help-smalltalk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-smalltalk

Reply via email to