[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Help-smalltalk] [PATCH] Don't trust *_DIG
From: |
Paolo Bonzini |
Subject: |
[Help-smalltalk] [PATCH] Don't trust *_DIG |
Date: |
Thu, 24 May 2007 14:12:47 +0200 |
User-agent: |
Thunderbird 2.0.0.0 (Macintosh/20070326) |
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 <address@hidden>
* 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"),
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Help-smalltalk] [PATCH] Don't trust *_DIG,
Paolo Bonzini <=