@@ -141,6 +141,9 @@ struct DiyFp {
141
141
double d;
142
142
uint64_t u64 ;
143
143
}u;
144
+ RAPIDJSON_ASSERT (f <= kDpHiddenBit + kDpSignificandMask );
145
+ RAPIDJSON_ASSERT (e >= kDpDenormalExponent );
146
+ RAPIDJSON_ASSERT (e < kDpMaxExponent );
144
147
const uint64_t be = (e == kDpDenormalExponent && (f & kDpHiddenBit ) == 0 ) ? 0 :
145
148
static_cast <uint64_t >(e + kDpExponentBias );
146
149
u.u64 = (f & kDpSignificandMask ) | (be << kDpSignificandSize );
@@ -220,6 +223,7 @@ inline DiyFp GetCachedPowerByIndex(size_t index) {
220
223
641 , 667 , 694 , 720 , 747 , 774 , 800 , 827 , 853 , 880 ,
221
224
907 , 933 , 960 , 986 , 1013 , 1039 , 1066
222
225
};
226
+ RAPIDJSON_ASSERT (index < 87 );
223
227
return DiyFp (kCachedPowers_F [index], kCachedPowers_E [index]);
224
228
}
225
229
@@ -238,10 +242,11 @@ inline DiyFp GetCachedPower(int e, int* K) {
238
242
}
239
243
240
244
inline DiyFp GetCachedPower10 (int exp, int *outExp) {
241
- unsigned index = (static_cast <unsigned >(exp) + 348u ) / 8u ;
242
- *outExp = -348 + static_cast <int >(index) * 8 ;
243
- return GetCachedPowerByIndex (index);
244
- }
245
+ RAPIDJSON_ASSERT (exp >= -348 );
246
+ unsigned index = static_cast <unsigned >(exp + 348 ) / 8u ;
247
+ *outExp = -348 + static_cast <int >(index) * 8 ;
248
+ return GetCachedPowerByIndex (index);
249
+ }
245
250
246
251
#ifdef __GNUC__
247
252
RAPIDJSON_DIAG_POP
0 commit comments