diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h index 6eceae0b6..e84f84210 100644 --- a/jerry-core/ecma/base/ecma-globals.h +++ b/jerry-core/ecma/base/ecma-globals.h @@ -619,7 +619,7 @@ typedef double ecma_number_t; /** * Maximum number of significant digits that ecma-number can store */ -#define ECMA_NUMBER_MAX_DIGITS (18) +#define ECMA_NUMBER_MAX_DIGITS (19) /** * Width of sign field diff --git a/jerry-core/ecma/base/ecma-helpers-conversion.cpp b/jerry-core/ecma/base/ecma-helpers-conversion.cpp index 34405ca12..ad6fa56e3 100644 --- a/jerry-core/ecma/base/ecma-helpers-conversion.cpp +++ b/jerry-core/ecma/base/ecma-helpers-conversion.cpp @@ -626,7 +626,7 @@ ecma_utf8_string_to_number (const lit_utf8_byte_t *str_p, /**< utf-8 string */ } #if CONFIG_ECMA_NUMBER_TYPE == CONFIG_ECMA_NUMBER_FLOAT64 - int32_t binary_exponent = 1; + int32_t binary_exponent = 33; /* * 128-bit mantissa storage @@ -635,9 +635,9 @@ ecma_utf8_string_to_number (const lit_utf8_byte_t *str_p, /**< utf-8 string */ */ ECMA_NUMBER_CONVERSION_128BIT_INTEGER (fraction_uint128); ECMA_NUMBER_CONVERSION_128BIT_INTEGER_INIT (fraction_uint128, + 0ull, fraction_uint64 >> 32u, (uint32_t) fraction_uint64, - 0ull, 0ull); /* Normalizing mantissa */ diff --git a/tests/jerry/arithmetics-bignums.js b/tests/jerry/arithmetics-bignums.js index 295846ea1..29f4c099f 100644 --- a/tests/jerry/arithmetics-bignums.js +++ b/tests/jerry/arithmetics-bignums.js @@ -24,3 +24,5 @@ big++; assert(big == 2147483649); // overflow on 32bit numbers assert ((1152921504606846900).toString() === "1152921504606847000") + +assert (1.797693134862315808e+308 === Infinity);