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