es.math.asinh.js 674 B

123456789101112131415161718192021222324
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. // eslint-disable-next-line es/no-math-asinh -- required for testing
  4. var $asinh = Math.asinh;
  5. var log = Math.log;
  6. var sqrt = Math.sqrt;
  7. var LN2 = Math.LN2;
  8. // sqrt(2 ** 53) - prevent n * n overflow
  9. var SQRT_2_POW_53 = 94906265.62425156;
  10. function asinh(x) {
  11. var n = +x;
  12. return !isFinite(n) || n === 0 ? n : n < 0 ? -asinh(-n) : n > SQRT_2_POW_53 ? log(n) + LN2 : log(n + sqrt(n * n + 1));
  13. }
  14. var FORCED = !($asinh && 1 / $asinh(0) > 0);
  15. // `Math.asinh` method
  16. // https://tc39.es/ecma262/#sec-math.asinh
  17. // Tor Browser bug: Math.asinh(0) -> -0
  18. $({ target: 'Math', stat: true, forced: FORCED }, {
  19. asinh: asinh
  20. });