| 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 "use strict"; | 5 "use strict"; |
| 6 | 6 |
| 7 // This file relies on the fact that the following declarations have been made | 7 // This file relies on the fact that the following declarations have been made |
| 8 // in runtime.js: | 8 // in runtime.js: |
| 9 // var $Object = global.Object; | 9 // var $Object = global.Object; |
| 10 | 10 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 340 } else if (xabs < 6E-5) { | 340 } else if (xabs < 6E-5) { |
| 341 return x * (1 + x * (1/2 + x * (1/6))); | 341 return x * (1 + x * (1/2 + x * (1/6))); |
| 342 } else if (xabs < 2E-2) { | 342 } else if (xabs < 2E-2) { |
| 343 return x * (1 + x * (1/2 + x * (1/6 + | 343 return x * (1 + x * (1/2 + x * (1/6 + |
| 344 x * (1/24 + x * (1/120 + x * (1/720)))))); | 344 x * (1/24 + x * (1/120 + x * (1/720)))))); |
| 345 } else { // Use regular exp if not close enough to 0. | 345 } else { // Use regular exp if not close enough to 0. |
| 346 return MathExp(x) - 1; | 346 return MathExp(x) - 1; |
| 347 } | 347 } |
| 348 } | 348 } |
| 349 | 349 |
| 350 // ES6 draft 09-27-13, section 20.2.2.20. | |
| 351 // Use Taylor series to approximate. With y = x + 1; | |
| 352 // log(y) at 1 == log(1) + log'(1)(y-1)/1! + log''(1)(y-1)^2/2! + ... | |
| 353 // == 0 + x - x^2/2 + x^3/3 ... | |
| 354 // The closer x is to 0, the fewer terms are required. | |
| 355 function MathLog1p(x) { | |
| 356 if (!IS_NUMBER(x)) x = NonNumberToNumber(x); | |
| 357 var xabs = MathAbs(x); | |
| 358 if (xabs < 1E-7) { | |
| 359 return x * (1 - x * (1/2)); | |
| 360 } else if (xabs < 3E-5) { | |
| 361 return x * (1 - x * (1/2 - x * (1/3))); | |
| 362 } else if (xabs < 7E-3) { | |
| 363 return x * (1 - x * (1/2 - x * (1/3 - x * (1/4 - | |
| 364 x * (1/5 - x * (1/6 - x * (1/7))))))); | |
| 365 } else { // Use regular log if not close enough to 0. | |
| 366 return MathLog(1 + x); | |
| 367 } | |
| 368 } | |
| 369 | |
| 370 // ------------------------------------------------------------------- | 350 // ------------------------------------------------------------------- |
| 371 | 351 |
| 372 function SetUpMath() { | 352 function SetUpMath() { |
| 373 %CheckIsBootstrapping(); | 353 %CheckIsBootstrapping(); |
| 374 | 354 |
| 375 %SetPrototype($Math, $Object.prototype); | 355 %SetPrototype($Math, $Object.prototype); |
| 376 %AddNamedProperty(global, "Math", $Math, DONT_ENUM); | 356 %AddNamedProperty(global, "Math", $Math, DONT_ENUM); |
| 377 %FunctionSetInstanceClassName(MathConstructor, 'Math'); | 357 %FunctionSetInstanceClassName(MathConstructor, 'Math'); |
| 378 | 358 |
| 379 // Set up math constants. | 359 // Set up math constants. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 "tanh", MathTanh, | 401 "tanh", MathTanh, |
| 422 "asinh", MathAsinh, | 402 "asinh", MathAsinh, |
| 423 "acosh", MathAcosh, | 403 "acosh", MathAcosh, |
| 424 "atanh", MathAtanh, | 404 "atanh", MathAtanh, |
| 425 "log10", MathLog10, | 405 "log10", MathLog10, |
| 426 "log2", MathLog2, | 406 "log2", MathLog2, |
| 427 "hypot", MathHypot, | 407 "hypot", MathHypot, |
| 428 "fround", MathFroundJS, | 408 "fround", MathFroundJS, |
| 429 "clz32", MathClz32, | 409 "clz32", MathClz32, |
| 430 "cbrt", MathCbrt, | 410 "cbrt", MathCbrt, |
| 431 "log1p", MathLog1p, | 411 "log1p", MathLog1p, // implemented by third_party/fdlibm |
| 432 "expm1", MathExpm1 | 412 "expm1", MathExpm1 |
| 433 )); | 413 )); |
| 434 | 414 |
| 435 %SetInlineBuiltinFlag(MathCeil); | 415 %SetInlineBuiltinFlag(MathCeil); |
| 436 %SetInlineBuiltinFlag(MathRandom); | 416 %SetInlineBuiltinFlag(MathRandom); |
| 437 %SetInlineBuiltinFlag(MathSin); | 417 %SetInlineBuiltinFlag(MathSin); |
| 438 %SetInlineBuiltinFlag(MathCos); | 418 %SetInlineBuiltinFlag(MathCos); |
| 439 } | 419 } |
| 440 | 420 |
| 441 SetUpMath(); | 421 SetUpMath(); |
| OLD | NEW |