Revert in-house pow10 (d80a3ea
) and fix oss-fuzz/16922
Probably can be fixed but merging it was wrong so let's revert.
This commit is contained in:
parent
41d6e95b0d
commit
d3b984d379
|
@ -75,37 +75,6 @@ struct top_dict_values_t : dict_values_t<OPSTR>
|
|||
unsigned int FDArrayOffset;
|
||||
};
|
||||
|
||||
/* Compile time calculating 10^n for n = 2^i */
|
||||
constexpr double
|
||||
pow10_of_2i (unsigned int n)
|
||||
{
|
||||
return n == 1 ? 10. : pow10_of_2i (n >> 1) * pow10_of_2i (n >> 1);
|
||||
}
|
||||
|
||||
static const double powers_of_10[] =
|
||||
{
|
||||
pow10_of_2i (0x100),
|
||||
pow10_of_2i (0x80),
|
||||
pow10_of_2i (0x40),
|
||||
pow10_of_2i (0x20),
|
||||
pow10_of_2i (0x10),
|
||||
pow10_of_2i (0x8),
|
||||
pow10_of_2i (0x4),
|
||||
pow10_of_2i (0x2),
|
||||
pow10_of_2i (0x1),
|
||||
};
|
||||
|
||||
/* Works for x < 512 */
|
||||
inline double
|
||||
_hb_pow10 (unsigned int x)
|
||||
{
|
||||
unsigned int mask = 0x100; /* Should be same with the first element */
|
||||
unsigned long result = 1;
|
||||
const double *power = powers_of_10;
|
||||
for (; mask; ++power, mask >>= 1) if (mask & x) result *= *power;
|
||||
return result;
|
||||
}
|
||||
|
||||
struct dict_opset_t : opset_t<number_t>
|
||||
{
|
||||
static void process_op (op_code_t op, interp_env_t<number_t>& env)
|
||||
|
@ -168,7 +137,7 @@ struct dict_opset_t : opset_t<number_t>
|
|||
value = (double) (neg ? -int_part : int_part);
|
||||
if (frac_count > 0)
|
||||
{
|
||||
double frac = frac_part / _hb_pow10 (frac_count);
|
||||
double frac = frac_part / pow (10.0, (double) frac_count);
|
||||
if (neg) frac = -frac;
|
||||
value += frac;
|
||||
}
|
||||
|
@ -184,9 +153,9 @@ struct dict_opset_t : opset_t<number_t>
|
|||
if (exp_part != 0)
|
||||
{
|
||||
if (exp_neg)
|
||||
value /= _hb_pow10 (exp_part);
|
||||
value /= pow (10.0, (double) exp_part);
|
||||
else
|
||||
value *= _hb_pow10 (exp_part);
|
||||
value *= pow (10.0, (double) exp_part);
|
||||
}
|
||||
return value;
|
||||
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue