You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Userland/Libraries/LibJS/Runtime/Value.cpp
+25Lines changed: 25 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -1212,11 +1212,36 @@ Value mod(GlobalObject& global_object, Value lhs, Value rhs)
1212
1212
if (vm.exception())
1213
1213
return {};
1214
1214
if (both_number(lhs_numeric, rhs_numeric)) {
1215
+
// 6.1.6.1.6 Number::remainder ( n, d ), https://tc39.es/ecma262/#sec-numeric-types-number-remainder
1216
+
1217
+
// 1. If n is NaN or d is NaN, return NaN.
1215
1218
if (lhs_numeric.is_nan() || rhs_numeric.is_nan())
1216
1219
returnjs_nan();
1220
+
1221
+
// 2. If n is +∞𝔽 or n is -∞𝔽, return NaN.
1222
+
if (lhs_numeric.is_positive_infinity() || lhs_numeric.is_negative_infinity())
1223
+
returnjs_nan();
1224
+
1225
+
// 3. If d is +∞𝔽 or d is -∞𝔽, return n.
1226
+
if (rhs_numeric.is_positive_infinity() || rhs_numeric.is_negative_infinity())
1227
+
return lhs_numeric;
1228
+
1229
+
// 4. If d is +0𝔽 or d is -0𝔽, return NaN.
1230
+
if (rhs_numeric.is_positive_zero() || rhs_numeric.is_negative_zero())
1231
+
returnjs_nan();
1232
+
1233
+
// 5. If n is +0𝔽 or n is -0𝔽, return n.
1234
+
if (lhs_numeric.is_positive_zero() || lhs_numeric.is_negative_zero())
1235
+
return lhs_numeric;
1236
+
1237
+
// 6. Assert: n and d are finite and non-zero.
1238
+
1217
1239
auto index = lhs_numeric.as_double();
1218
1240
auto period = rhs_numeric.as_double();
1219
1241
auto trunc = (double)(i32)(index / period);
1242
+
1243
+
// 7. Let r be ℝ(n) - (ℝ(d) × q) where q is an integer that is negative if and only if n and d have opposite sign, and whose magnitude is as large as possible without exceeding the magnitude of ℝ(n) / ℝ(d).
0 commit comments