math.acosh
Version:
An ES-spec-compliant Math.acosh shim/polyfill/replacement that works as far down as ES3
29 lines (24 loc) • 533 B
JavaScript
;
var log1p = require('math.log1p');
var isNaN = require('is-nan');
var sqrt = Math.sqrt;
var LOG2E = Math.LOG2E;
var $Number = Number;
module.exports = function acosh(value) {
var x = $Number(value);
if (isNaN(x) || value < 1) {
return NaN;
}
if (x === 1) {
return 0;
}
if (x === Infinity) {
return x;
}
var xInvSquared = 1 / (x * x);
if (x < 2) {
return log1p(x - 1 + (sqrt(1 - xInvSquared) * x));
}
var halfX = x / 2;
return log1p(halfX + (sqrt(1 - xInvSquared) * halfX) - 1) + (1 / LOG2E);
};