[PATCH] libstdc++/5045: wrong numeric_limits::digits10 for integer types
Paolo Carlini
pcarlini@unitus.it
Fri Dec 7 13:33:00 GMT 2001
Hi,
I have analyzed this PR and in my reading of the standard submitter is right: according to
18.2.1.2.9, digits10 is "Number of base 10 digits that can be represented without change".
However, right now, for instance, digits10 for unsigned short is *3* whereas only all the
*2* digits base 10 numbers can be represented over 8 bits (i.e., from 0 to 99 *not* from 0
to 999).
May I apply the following patch?
Cheers,
Paolo.
//////////////
2001-12-07 Paolo Carlini <pcarlini@unitus.it>
* include/bits/std_limits.h: Fix __glibcpp_XX_digits10 defines for
integer types.
--- std_limits.h.orig Fri Dec 7 22:15:44 2001
+++ std_limits.h Fri Dec 7 22:22:07 2001
@@ -144,31 +144,31 @@
#define __glibcpp_s8_max 127
#define __glibcpp_s8_min (-__glibcpp_s8_max - 1)
#define __glibcpp_s8_digits 7
-#define __glibcpp_s8_digits10 3
+#define __glibcpp_s8_digits10 2
#define __glibcpp_u8_min 0U
#define __glibcpp_u8_max (__glibcpp_s8_max * 2 + 1)
#define __glibcpp_u8_digits 8
-#define __glibcpp_u8_digits10 3
+#define __glibcpp_u8_digits10 2
#define __glibcpp_s16_max 32767
#define __glibcpp_s16_min (-__glibcpp_s16_max - 1)
#define __glibcpp_s16_digits 15
-#define __glibcpp_s16_digits10 5
+#define __glibcpp_s16_digits10 4
#define __glibcpp_u16_min 0U
#define __glibcpp_u16_max (__glibcpp_s16_max * 2 + 1)
#define __glibcpp_u16_digits 16
-#define __glibcpp_u16_digits10 5
+#define __glibcpp_u16_digits10 4
#define __glibcpp_s32_max 2147483647L
#define __glibcpp_s32_min (-__glibcpp_s32_max - 1)
#define __glibcpp_s32_digits 31
-#define __glibcpp_s32_digits10 10
+#define __glibcpp_s32_digits10 9
#define __glibcpp_u32_min 0UL
#define __glibcpp_u32_max (__glibcpp_s32_max * 2U + 1)
#define __glibcpp_u32_digits 32
-#define __glibcpp_u32_digits10 10
+#define __glibcpp_u32_digits10 9
#define __glibcpp_s64_max 9223372036854775807LL
#define __glibcpp_s64_min (-__glibcpp_s64_max - 1)
#define __glibcpp_s64_digits 63
-#define __glibcpp_s64_digits10 19
+#define __glibcpp_s64_digits10 18
#define __glibcpp_u64_min 0ULL
#define __glibcpp_u64_max (__glibcpp_s64_max * 2ULL + 1)
#define __glibcpp_u64_digits 64
More information about the Libstdc++
mailing list