LibJS: Fix integer overflow in Number::exponentiate
The exponent might be larger than the range of values representable by an i32, so we have to use the `fmod` function instead of the modulo operator. This fixes 3 test262 tests on AArch64. No changes on x86-64.
This commit is contained in:
parent
56fb5a3f5d
commit
5aef8f280f
Notes:
sideshowbarker
2024-07-17 02:28:18 +09:00
Author: https://github.com/BertalanD Commit: https://github.com/SerenityOS/serenity/commit/5aef8f280f Pull-request: https://github.com/SerenityOS/serenity/pull/19646
1 changed files with 2 additions and 2 deletions
|
@ -1936,7 +1936,7 @@ static Value exp_double(Value base, Value exponent)
|
|||
|
||||
// 5. If base is -∞𝔽, then
|
||||
if (base.is_negative_infinity()) {
|
||||
auto is_odd_integral_number = exponent.is_integral_number() && (static_cast<i32>(exponent.as_double()) % 2 != 0);
|
||||
auto is_odd_integral_number = exponent.is_integral_number() && (fmod(exponent.as_double(), 2.0) != 0);
|
||||
|
||||
// a. If exponent > +0𝔽, then
|
||||
if (exponent.as_double() > 0) {
|
||||
|
@ -1958,7 +1958,7 @@ static Value exp_double(Value base, Value exponent)
|
|||
|
||||
// 7. If base is -0𝔽, then
|
||||
if (base.is_negative_zero()) {
|
||||
auto is_odd_integral_number = exponent.is_integral_number() && (static_cast<i32>(exponent.as_double()) % 2 != 0);
|
||||
auto is_odd_integral_number = exponent.is_integral_number() && (fmod(exponent.as_double(), 2.0) != 0);
|
||||
|
||||
// a. If exponent > +0𝔽, then
|
||||
if (exponent.as_double() > 0) {
|
||||
|
|
Loading…
Add table
Reference in a new issue