1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 09:34:59 +00:00

LibJS: Add a remainder() function to represent remainder(x, y)

This is just the same as calling x % y - or fmod, and is implemented
for symmetry with the 'modulo' function.
This commit is contained in:
Shannon Booth 2024-01-08 19:20:31 +13:00 committed by Andreas Kling
parent cc083310a7
commit af586dde64

View file

@ -316,4 +316,25 @@ auto modulo(Crypto::BigInteger auto const& x, Crypto::BigInteger auto const& y)
return result;
}
// remainder(x, y), https://tc39.es/proposal-temporal/#eqn-remainder
template<Arithmetic T, Arithmetic U>
auto remainder(T x, U y)
{
// The mathematical function remainder(x, y) produces the mathematical value whose sign is the sign of x and whose magnitude is abs(x) modulo y.
VERIFY(y != 0);
if constexpr (IsFloatingPoint<T> || IsFloatingPoint<U>) {
if constexpr (IsFloatingPoint<U>)
VERIFY(isfinite(y));
return fmod(x, y);
} else {
return x % y;
}
}
auto remainder(Crypto::BigInteger auto const& x, Crypto::BigInteger auto const& y)
{
VERIFY(!y.is_zero());
return x.divided_by(y).remainder;
}
}