| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 (function(global, utils) { | 5 (function(global, utils) { | 
| 6 "use strict"; | 6 "use strict"; | 
| 7 | 7 | 
| 8 %CheckIsBootstrapping(); | 8 %CheckIsBootstrapping(); | 
| 9 | 9 | 
| 10 // ------------------------------------------------------------------- | 10 // ------------------------------------------------------------------- | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 59 | 59 | 
| 60 // ES6 draft 09-27-13, section 20.2.2.3. | 60 // ES6 draft 09-27-13, section 20.2.2.3. | 
| 61 function MathAcosh(x) { | 61 function MathAcosh(x) { | 
| 62   x = TO_NUMBER(x); | 62   x = TO_NUMBER(x); | 
| 63   if (x < 1) return NaN; | 63   if (x < 1) return NaN; | 
| 64   // Idempotent for NaN and +Infinity. | 64   // Idempotent for NaN and +Infinity. | 
| 65   if (!NUMBER_IS_FINITE(x)) return x; | 65   if (!NUMBER_IS_FINITE(x)) return x; | 
| 66   return %math_log(x + %math_sqrt(x + 1) * %math_sqrt(x - 1)); | 66   return %math_log(x + %math_sqrt(x + 1) * %math_sqrt(x - 1)); | 
| 67 } | 67 } | 
| 68 | 68 | 
| 69 // ES6 draft 09-27-13, section 20.2.2.17. |  | 
| 70 function MathHypot(x, y) {  // Function length is 2. |  | 
| 71   // We may want to introduce fast paths for two arguments and when |  | 
| 72   // normalization to avoid overflow is not necessary.  For now, we |  | 
| 73   // simply assume the general case. |  | 
| 74   var length = arguments.length; |  | 
| 75   var max = 0; |  | 
| 76   for (var i = 0; i < length; i++) { |  | 
| 77     var n = %math_abs(arguments[i]); |  | 
| 78     if (n > max) max = n; |  | 
| 79     arguments[i] = n; |  | 
| 80   } |  | 
| 81   if (max === INFINITY) return INFINITY; |  | 
| 82 |  | 
| 83   // Kahan summation to avoid rounding errors. |  | 
| 84   // Normalize the numbers to the largest one to avoid overflow. |  | 
| 85   if (max === 0) max = 1; |  | 
| 86   var sum = 0; |  | 
| 87   var compensation = 0; |  | 
| 88   for (var i = 0; i < length; i++) { |  | 
| 89     var n = arguments[i] / max; |  | 
| 90     var summand = n * n - compensation; |  | 
| 91     var preliminary = sum + summand; |  | 
| 92     compensation = (preliminary - sum) - summand; |  | 
| 93     sum = preliminary; |  | 
| 94   } |  | 
| 95   return %math_sqrt(sum) * max; |  | 
| 96 } |  | 
| 97 | 69 | 
| 98 // ------------------------------------------------------------------- | 70 // ------------------------------------------------------------------- | 
| 99 | 71 | 
| 100 %AddNamedProperty(GlobalMath, toStringTagSymbol, "Math", READ_ONLY | DONT_ENUM); | 72 %AddNamedProperty(GlobalMath, toStringTagSymbol, "Math", READ_ONLY | DONT_ENUM); | 
| 101 | 73 | 
| 102 // Set up math constants. | 74 // Set up math constants. | 
| 103 utils.InstallConstants(GlobalMath, [ | 75 utils.InstallConstants(GlobalMath, [ | 
| 104   "PI", 3.1415926535897932, | 76   "PI", 3.1415926535897932, | 
| 105   "SQRT1_2", 0.7071067811865476, | 77   "SQRT1_2", 0.7071067811865476, | 
| 106   "SQRT2", 1.4142135623730951 | 78   "SQRT2", 1.4142135623730951 | 
| 107 ]); | 79 ]); | 
| 108 | 80 | 
| 109 // Set up non-enumerable functions of the Math object and | 81 // Set up non-enumerable functions of the Math object and | 
| 110 // set their names. | 82 // set their names. | 
| 111 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ | 83 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ | 
| 112   "random", MathRandom, | 84   "random", MathRandom, | 
| 113   "sign", MathSign, | 85   "sign", MathSign, | 
| 114   "asinh", MathAsinh, | 86   "asinh", MathAsinh, | 
| 115   "acosh", MathAcosh, | 87   "acosh", MathAcosh | 
| 116   "hypot", MathHypot, |  | 
| 117 ]); | 88 ]); | 
| 118 | 89 | 
| 119 %SetForceInlineFlag(MathRandom); | 90 %SetForceInlineFlag(MathRandom); | 
| 120 %SetForceInlineFlag(MathSign); | 91 %SetForceInlineFlag(MathSign); | 
| 121 | 92 | 
| 122 // ------------------------------------------------------------------- | 93 // ------------------------------------------------------------------- | 
| 123 // Exports | 94 // Exports | 
| 124 | 95 | 
| 125 utils.Export(function(to) { | 96 utils.Export(function(to) { | 
| 126   to.MathRandom = MathRandom; | 97   to.MathRandom = MathRandom; | 
| 127 }); | 98 }); | 
| 128 | 99 | 
| 129 }) | 100 }) | 
| OLD | NEW | 
|---|