fastnum/decimal/dec/math/
acosh.rs1use 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}