Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(433)

Unified Diff: src/third_party/fdlibm/fdlibm.js

Issue 2083573002: [builtins] Unify Cosh, Sinh and Tanh as exports from flibm (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE and windows fix. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/objects.h ('k') | src/v8.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/third_party/fdlibm/fdlibm.js
diff --git a/src/third_party/fdlibm/fdlibm.js b/src/third_party/fdlibm/fdlibm.js
index 26ef126f6850ac5ef0a980decd0fe48c60956f1d..ffb67de7f1b63ee5f7ef4dc160a061c2cedd1a50 100644
--- a/src/third_party/fdlibm/fdlibm.js
+++ b/src/third_party/fdlibm/fdlibm.js
@@ -26,178 +26,11 @@
// Imports
var GlobalMath = global.Math;
-var MathAbs;
-var MathExpm1;
-utils.Import(function(from) {
- MathAbs = from.MathAbs;
- MathExpm1 = from.MathExpm1;
-});
-
-// ES6 draft 09-27-13, section 20.2.2.30.
-// Math.sinh
-// Method :
-// mathematically sinh(x) if defined to be (exp(x)-exp(-x))/2
-// 1. Replace x by |x| (sinh(-x) = -sinh(x)).
-// 2.
-// E + E/(E+1)
-// 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x)
-// 2
-//
-// 22 <= x <= lnovft : sinh(x) := exp(x)/2
-// lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2)
-// ln2ovft < x : sinh(x) := x*shuge (overflow)
-//
-// Special cases:
-// sinh(x) is |x| if x is +Infinity, -Infinity, or NaN.
-// only sinh(0)=0 is exact for finite x.
-//
-define KSINH_OVERFLOW = 710.4758600739439;
-define TWO_M28 = 3.725290298461914e-9; // 2^-28, empty lower half
-define LOG_MAXD = 709.7822265625; // 0x40862e42 00000000, empty lower half
-
-function MathSinh(x) {
- x = x * 1; // Convert to number.
- var h = (x < 0) ? -0.5 : 0.5;
- // |x| in [0, 22]. return sign(x)*0.5*(E+E/(E+1))
- var ax = MathAbs(x);
- if (ax < 22) {
- // For |x| < 2^-28, sinh(x) = x
- if (ax < TWO_M28) return x;
- var t = MathExpm1(ax);
- if (ax < 1) return h * (2 * t - t * t / (t + 1));
- return h * (t + t / (t + 1));
- }
- // |x| in [22, log(maxdouble)], return 0.5 * exp(|x|)
- if (ax < LOG_MAXD) return h * %math_exp(ax);
- // |x| in [log(maxdouble), overflowthreshold]
- // overflowthreshold = 710.4758600739426
- if (ax <= KSINH_OVERFLOW) {
- var w = %math_exp(0.5 * ax);
- var t = h * w;
- return t * w;
- }
- // |x| > overflowthreshold or is NaN.
- // Return Infinity of the appropriate sign or NaN.
- return x * INFINITY;
-}
-
-
-// ES6 draft 09-27-13, section 20.2.2.12.
-// Math.cosh
-// Method :
-// mathematically cosh(x) if defined to be (exp(x)+exp(-x))/2
-// 1. Replace x by |x| (cosh(x) = cosh(-x)).
-// 2.
-// [ exp(x) - 1 ]^2
-// 0 <= x <= ln2/2 : cosh(x) := 1 + -------------------
-// 2*exp(x)
-//
-// exp(x) + 1/exp(x)
-// ln2/2 <= x <= 22 : cosh(x) := -------------------
-// 2
-// 22 <= x <= lnovft : cosh(x) := exp(x)/2
-// lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2)
-// ln2ovft < x : cosh(x) := huge*huge (overflow)
-//
-// Special cases:
-// cosh(x) is |x| if x is +INF, -INF, or NaN.
-// only cosh(0)=1 is exact for finite x.
-//
-define KCOSH_OVERFLOW = 710.4758600739439;
-
-function MathCosh(x) {
- x = x * 1; // Convert to number.
- var ix = %_DoubleHi(x) & 0x7fffffff;
- // |x| in [0,0.5*log2], return 1+expm1(|x|)^2/(2*exp(|x|))
- if (ix < 0x3fd62e43) {
- var t = MathExpm1(MathAbs(x));
- var w = 1 + t;
- // For |x| < 2^-55, cosh(x) = 1
- if (ix < 0x3c800000) return w;
- return 1 + (t * t) / (w + w);
- }
- // |x| in [0.5*log2, 22], return (exp(|x|)+1/exp(|x|)/2
- if (ix < 0x40360000) {
- var t = %math_exp(MathAbs(x));
- return 0.5 * t + 0.5 / t;
- }
- // |x| in [22, log(maxdouble)], return half*exp(|x|)
- if (ix < 0x40862e42) return 0.5 * %math_exp(MathAbs(x));
- // |x| in [log(maxdouble), overflowthreshold]
- if (MathAbs(x) <= KCOSH_OVERFLOW) {
- var w = %math_exp(0.5 * MathAbs(x));
- var t = 0.5 * w;
- return t * w;
- }
- if (NUMBER_IS_NAN(x)) return x;
- // |x| > overflowthreshold.
- return INFINITY;
-}
-
-// ES6 draft 09-27-13, section 20.2.2.33.
-// Math.tanh(x)
-// Method :
-// x -x
-// e - e
-// 0. tanh(x) is defined to be -----------
-// x -x
-// e + e
-// 1. reduce x to non-negative by tanh(-x) = -tanh(x).
-// 2. 0 <= x <= 2**-55 : tanh(x) := x*(one+x)
-// -t
-// 2**-55 < x <= 1 : tanh(x) := -----; t = expm1(-2x)
-// t + 2
-// 2
-// 1 <= x <= 22.0 : tanh(x) := 1- ----- ; t = expm1(2x)
-// t + 2
-// 22.0 < x <= INF : tanh(x) := 1.
-//
-// Special cases:
-// tanh(NaN) is NaN;
-// only tanh(0) = 0 is exact for finite argument.
-//
-
-define TWO_M55 = 2.77555756156289135105e-17; // 2^-55, empty lower half
-
-function MathTanh(x) {
- x = x * 1; // Convert to number.
- // x is Infinity or NaN
- if (!NUMBER_IS_FINITE(x)) {
- if (x > 0) return 1;
- if (x < 0) return -1;
- return x;
- }
-
- var ax = MathAbs(x);
- var z;
- // |x| < 22
- if (ax < 22) {
- if (ax < TWO_M55) {
- // |x| < 2^-55, tanh(small) = small.
- return x;
- }
- if (ax >= 1) {
- // |x| >= 1
- var t = MathExpm1(2 * ax);
- z = 1 - 2 / (t + 2);
- } else {
- var t = MathExpm1(-2 * ax);
- z = -t / (t + 2);
- }
- } else {
- // |x| > 22, return +/- 1
- z = 1;
- }
- return (x >= 0) ? z : -z;
-}
+utils.Import(function(from) {});
//-------------------------------------------------------------------
-utils.InstallFunctions(GlobalMath, DONT_ENUM, [
- "sinh", MathSinh,
- "cosh", MathCosh,
- "tanh", MathTanh
-]);
+utils.InstallFunctions(GlobalMath, DONT_ENUM, []);
})
« no previous file with comments | « src/objects.h ('k') | src/v8.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698