\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.002814715336328044159586170280817896128:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.9017023301953626113203199565759859979153:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right) + 2 \cdot x\right)\\
\end{array}double f(double x) {
double r111786 = x;
double r111787 = r111786 * r111786;
double r111788 = 1.0;
double r111789 = r111787 + r111788;
double r111790 = sqrt(r111789);
double r111791 = r111786 + r111790;
double r111792 = log(r111791);
return r111792;
}
double f(double x) {
double r111793 = x;
double r111794 = -1.002814715336328;
bool r111795 = r111793 <= r111794;
double r111796 = 0.125;
double r111797 = 3.0;
double r111798 = pow(r111793, r111797);
double r111799 = r111796 / r111798;
double r111800 = 0.0625;
double r111801 = 5.0;
double r111802 = pow(r111793, r111801);
double r111803 = r111800 / r111802;
double r111804 = r111799 - r111803;
double r111805 = 0.5;
double r111806 = r111805 / r111793;
double r111807 = r111804 - r111806;
double r111808 = log(r111807);
double r111809 = 0.9017023301953626;
bool r111810 = r111793 <= r111809;
double r111811 = 1.0;
double r111812 = sqrt(r111811);
double r111813 = log(r111812);
double r111814 = -0.16666666666666666;
double r111815 = r111811 / r111814;
double r111816 = r111798 / r111815;
double r111817 = r111793 + r111816;
double r111818 = r111817 / r111812;
double r111819 = r111813 + r111818;
double r111820 = r111806 - r111799;
double r111821 = 2.0;
double r111822 = r111821 * r111793;
double r111823 = r111820 + r111822;
double r111824 = log(r111823);
double r111825 = r111810 ? r111819 : r111824;
double r111826 = r111795 ? r111808 : r111825;
return r111826;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.2 |
| Herbie | 0.2 |
if x < -1.002814715336328Initial program 63.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.002814715336328 < x < 0.9017023301953626Initial program 58.7
Taylor expanded around 0 0.2
Simplified0.2
rmApplied associate-*r/0.2
Simplified0.2
if 0.9017023301953626 < x Initial program 32.2
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019323
(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)))))