fastnum/decimal/dec/math/
acosh.rs

1use crate::decimal::{
2    dec::math::{add::add, ln::ln, mul::mul, sqrt::sqrt, sub::sub},
3    Decimal,
4};
5
6type D<const N: usize> = Decimal<N>;
7
8#[inline]
9pub(crate) const fn acosh<const N: usize>(x: D<N>) -> D<N> {
10    if x.is_nan() {
11        return x.op_invalid();
12    }
13
14    if x.is_zero() {
15        return D::ZERO.with_ctx(x.context());
16    }
17
18    if x.is_infinite() {
19        return x.signaling_nan();
20    }
21
22    if x.le(&D::ONE) {
23        return x.signaling_nan();
24    }
25
26    ln(add(x, sqrt(sub(mul(x, x), D::ONE))))
27}