Implement missing Math.cbrt function from ES6 (#3680)

C implementation ported from fdlibm

Part of Issue #3568

JerryScript-DCO-1.0-Signed-off-by: Rafal Walczyna r.walczyna@samsung.com
This commit is contained in:
Rafal Walczyna
2020-04-20 15:40:03 +02:00
committed by GitHub
parent 1b01171a60
commit 453da11398
7 changed files with 186 additions and 4 deletions
+33
View File
@@ -0,0 +1,33 @@
// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
var p_zero = 0.0;
var n_zero = -p_zero;
function isSameZero (x, y)
{
return x === 0 && (1 / x) === (1 / y);
}
assert(isNaN(Math.cbrt(NaN)));
assert(isSameZero(Math.cbrt(p_zero), p_zero));
assert(isSameZero(Math.cbrt(n_zero), n_zero));
assert(Math.cbrt(Number.POSITIVE_INFINITY) === Number.POSITIVE_INFINITY);
assert(Math.cbrt(Number.NEGATIVE_INFINITY) === Number.NEGATIVE_INFINITY);
assert(Math.cbrt(1.0) === 1.0);
assert(Math.cbrt(-1.0) === -1.0);
assert(Math.cbrt(27.0) === 3.0);
assert(Math.cbrt(0.001) === 0.1);
+23
View File
@@ -531,6 +531,29 @@ check_double ("sqrt (4)", sqrt (4), 2.00000000000000000000E+00);
check_double ("sqrt (0.25)", sqrt (0.25), 5.00000000000000000000E-01);
check_double ("sqrt (6642.25)", sqrt (6642.25), 8.15000000000000000000E+01);
check_double ("sqrt (15239.9025)", sqrt (15239.9025), 1.23450000000000002842E+02);
check_double ("cbrt (0.0)", cbrt (0.0), 0.00000000000000000000E+00);
check_double ("cbrt (-0.0)", cbrt (-0.0), -0.00000000000000000000E+00);
check_double ("cbrt (1.0)", cbrt (1.0), 1.00000000000000000000E+00);
check_double ("cbrt (-1.0)", cbrt (-1.0), -1.00000000000000000000E+00);
check_double ("cbrt (INFINITY)", cbrt (INFINITY), INF);
check_double ("cbrt (-INFINITY)", cbrt (-INFINITY), -INF);
check_double ("cbrt (NAN)", cbrt (NAN), NAN);
check_double ("cbrt (0.7)", cbrt (0.7), 8.87904001742600645919E-01);
check_double ("cbrt (2)", cbrt (2), 1.25992104989487319067E+00);
check_double ("cbrt (10)", cbrt (10), 2.15443469003188381450E+00);
check_double ("cbrt (2.22e-308)", cbrt (2.22e-308), 2.81050475771047639693E-103);
check_double ("cbrt (2.23e-308)", cbrt (2.23e-308), 2.81471841433133404618E-103);
check_double ("cbrt (3.72e-09)", cbrt (3.72e-09), 1.54946217899915657419E-03);
check_double ("cbrt (7.37e+19)", cbrt (7.37e+19), 4.19265534205965511501E+06);
check_double ("cbrt (2209)", cbrt (2209), 1.30236256766892157799E+01);
check_double ("cbrt (4)", cbrt (4), 1.58740105196819958344E+00);
check_double ("cbrt (0.25)", cbrt (0.25), 6.29960524947436595333E-01);
check_double ("cbrt (6642.25)", cbrt (6642.25), 1.87977155063238647870E+01);
check_double ("cbrt (15239.9025)", cbrt (15239.9025), 2.47929038511971775449E+01);
check_double ("cbrt (3)", cbrt (3), 1.44224957030740830177E+00);
check_double ("cbrt (9)", cbrt (9), 2.08008382305190409056E+00);
check_double ("cbrt (-17.87)", cbrt (-17.87), -2.61441695192974155049E+00);
check_double ("cbrt (-8941)", cbrt (-8941), -2.07552848589356599973E+01);
check_double ("sin (0.0)", sin (0.0), 0.00000000000000000000E+00);
check_double ("sin (-0.0)", sin (-0.0), -0.00000000000000000000E+00);
check_double ("sin (1.0)", sin (1.0), 8.41470984807896504876E-01);