mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 15:48:12 +00:00
LibJS: Add special cases for Math.cosh and add spec comments
Although this already works in most cases in non-kvm serenity cases the cosh and other math function tend to return incorrect values for Infinity. This makes sure that whatever the underlying cosh function returns Math.cosh conforms to the spec.
This commit is contained in:
parent
379baa984d
commit
b79f03182d
2 changed files with 30 additions and 5 deletions
|
@ -498,9 +498,22 @@ JS_DEFINE_NATIVE_FUNCTION(MathObject::sinh)
|
|||
// 21.3.2.13 Math.cosh ( x ), https://tc39.es/ecma262/#sec-math.cosh
|
||||
JS_DEFINE_NATIVE_FUNCTION(MathObject::cosh)
|
||||
{
|
||||
// 1. Let n be ? ToNumber(x).
|
||||
auto number = TRY(vm.argument(0).to_number(global_object));
|
||||
|
||||
// 2. If n is NaN, return NaN.
|
||||
if (number.is_nan())
|
||||
return js_nan();
|
||||
|
||||
// 3. If n is +∞𝔽 or n is -∞𝔽, return +∞𝔽.
|
||||
if (number.is_positive_infinity() || number.is_negative_infinity())
|
||||
return js_infinity();
|
||||
|
||||
// 4. If n is +0𝔽 or n is -0𝔽, return 1𝔽.
|
||||
if (number.is_positive_zero() || number.is_negative_zero())
|
||||
return Value(1);
|
||||
|
||||
// 5. Return an implementation-approximated Number value representing the result of the hyperbolic cosine of ℝ(n).
|
||||
return Value(::cosh(number.as_double()));
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue