summaryrefslogtreecommitdiffstats
path: root/generic/tclStrToD.c
diff options
context:
space:
mode:
authorKevin B Kenny <kennykb@acm.org>2023-01-22 01:33:44 (GMT)
committerKevin B Kenny <kennykb@acm.org>2023-01-22 01:33:44 (GMT)
commit52948a790cfe853df5cdbecc3c5436685b6210ba (patch)
treeb40ca807205a0a7a2add35da4f344ac20520e2f4 /generic/tclStrToD.c
parent81262438a784ae0087c36fabd189c15a2433df33 (diff)
downloadtcl-52948a790cfe853df5cdbecc3c5436685b6210ba.zip
tcl-52948a790cfe853df5cdbecc3c5436685b6210ba.tar.gz
tcl-52948a790cfe853df5cdbecc3c5436685b6210ba.tar.bz2
Bug [e3dcab1d14] fix
Diffstat (limited to 'generic/tclStrToD.c')
-rw-r--r--generic/tclStrToD.c59
1 files changed, 30 insertions, 29 deletions
diff --git a/generic/tclStrToD.c b/generic/tclStrToD.c
index 557eaa1..972b5fd 100644
--- a/generic/tclStrToD.c
+++ b/generic/tclStrToD.c
@@ -263,34 +263,35 @@ static const int log2pow5[27] = {
};
#define N_LOG2POW5 27
-static const Tcl_WideUInt wuipow5[27] = {
- (Tcl_WideUInt) 1, /* 5**0 */
- (Tcl_WideUInt) 5,
- (Tcl_WideUInt) 25,
- (Tcl_WideUInt) 125,
- (Tcl_WideUInt) 625,
- (Tcl_WideUInt) 3125, /* 5**5 */
- (Tcl_WideUInt) 3125*5,
- (Tcl_WideUInt) 3125*25,
- (Tcl_WideUInt) 3125*125,
- (Tcl_WideUInt) 3125*625,
- (Tcl_WideUInt) 3125*3125, /* 5**10 */
- (Tcl_WideUInt) 3125*3125*5,
- (Tcl_WideUInt) 3125*3125*25,
- (Tcl_WideUInt) 3125*3125*125,
- (Tcl_WideUInt) 3125*3125*625,
- (Tcl_WideUInt) 3125*3125*3125, /* 5**15 */
- (Tcl_WideUInt) 3125*3125*3125*5,
- (Tcl_WideUInt) 3125*3125*3125*25,
- (Tcl_WideUInt) 3125*3125*3125*125,
- (Tcl_WideUInt) 3125*3125*3125*625,
- (Tcl_WideUInt) 3125*3125*3125*3125, /* 5**20 */
- (Tcl_WideUInt) 3125*3125*3125*3125*5,
- (Tcl_WideUInt) 3125*3125*3125*3125*25,
- (Tcl_WideUInt) 3125*3125*3125*3125*125,
- (Tcl_WideUInt) 3125*3125*3125*3125*625,
- (Tcl_WideUInt) 3125*3125*3125*3125*3125, /* 5**25 */
- (Tcl_WideUInt) 3125*3125*3125*3125*3125*5 /* 5**26 */
+static const Tcl_WideUInt wuipow5[28] = {
+ (Tcl_WideUInt) 1U, /* 5**0 */
+ (Tcl_WideUInt) 5U,
+ (Tcl_WideUInt) 25U,
+ (Tcl_WideUInt) 125U,
+ (Tcl_WideUInt) 625U,
+ (Tcl_WideUInt) 3125U, /* 5**5 */
+ (Tcl_WideUInt) 3125U*5U,
+ (Tcl_WideUInt) 3125U*25U,
+ (Tcl_WideUInt) 3125U*125U,
+ (Tcl_WideUInt) 3125U*625U,
+ (Tcl_WideUInt) 3125U*3125U, /* 5**10 */
+ (Tcl_WideUInt) 3125U*3125U*5U,
+ (Tcl_WideUInt) 3125U*3125U*25U,
+ (Tcl_WideUInt) 3125U*3125U*125U,
+ (Tcl_WideUInt) 3125U*3125U*625U,
+ (Tcl_WideUInt) 3125U*3125U*3125U, /* 5**15 */
+ (Tcl_WideUInt) 3125U*3125U*3125U*5U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*25U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*125U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*625U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U, /* 5**20 */
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*5U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*25U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*125U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*625U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*3125U, /* 5**25 */
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*3125U*5U,
+ (Tcl_WideUInt) 3125U*3125U*3125U*3125U*3125U*25U /* 5**27 */
};
/*
@@ -4395,7 +4396,7 @@ TclDoubleDigits(
++m2plus;
}
- if (s5+1 < N_LOG2POW5 && s2+1 + log2pow5[s5+1] <= 64) {
+ if (s5+1 < N_LOG2POW5 && s2+1 + log2pow5[s5+1] < 64) {
/*
* If 10*2**s2*5**s5 == 2**(s2+1)+5**(s5+1) fits in a 64-bit word,
* then all our intermediate calculations can be done using exact