\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.02274118080473863656720823200885206461:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 5.593634739476160749535593730286109348526 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \frac{-1}{6}, \log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\
\end{array}double f(double x) {
double r106654 = x;
double r106655 = r106654 * r106654;
double r106656 = 1.0;
double r106657 = r106655 + r106656;
double r106658 = sqrt(r106657);
double r106659 = r106654 + r106658;
double r106660 = log(r106659);
return r106660;
}
double f(double x) {
double r106661 = x;
double r106662 = -1.0227411808047386;
bool r106663 = r106661 <= r106662;
double r106664 = 0.125;
double r106665 = 3.0;
double r106666 = pow(r106661, r106665);
double r106667 = r106664 / r106666;
double r106668 = 0.5;
double r106669 = r106668 / r106661;
double r106670 = 0.0625;
double r106671 = 5.0;
double r106672 = pow(r106661, r106671);
double r106673 = r106670 / r106672;
double r106674 = r106669 + r106673;
double r106675 = r106667 - r106674;
double r106676 = log(r106675);
double r106677 = 0.0005593634739476161;
bool r106678 = r106661 <= r106677;
double r106679 = 1.0;
double r106680 = sqrt(r106679);
double r106681 = pow(r106680, r106665);
double r106682 = r106666 / r106681;
double r106683 = -0.16666666666666666;
double r106684 = log(r106680);
double r106685 = r106661 / r106680;
double r106686 = r106684 + r106685;
double r106687 = fma(r106682, r106683, r106686);
double r106688 = hypot(r106661, r106680);
double r106689 = r106661 + r106688;
double r106690 = log(r106689);
double r106691 = r106678 ? r106687 : r106690;
double r106692 = r106663 ? r106676 : r106691;
return r106692;
}




Bits error versus x
| Original | 53.2 |
|---|---|
| Target | 45.6 |
| Herbie | 0.1 |
if x < -1.0227411808047386Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0227411808047386 < x < 0.0005593634739476161Initial program 58.8
Taylor expanded around 0 0.2
Simplified0.2
if 0.0005593634739476161 < x Initial program 31.8
rmApplied add-sqr-sqrt31.8
Applied hypot-def0.1
Final simplification0.1
herbie shell --seed 2019305 +o rules:numerics
(FPCore (x)
:name "Hyperbolic arcsine"
:precision binary64
:herbie-target
(if (< x 0.0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))
(log (+ x (sqrt (+ (* x x) 1)))))