\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.004740488829904077050514388247393071651:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8999222701664713053304467393900267779827:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\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 r137704 = x;
double r137705 = r137704 * r137704;
double r137706 = 1.0;
double r137707 = r137705 + r137706;
double r137708 = sqrt(r137707);
double r137709 = r137704 + r137708;
double r137710 = log(r137709);
return r137710;
}
double f(double x) {
double r137711 = x;
double r137712 = -1.004740488829904;
bool r137713 = r137711 <= r137712;
double r137714 = 0.125;
double r137715 = 3.0;
double r137716 = pow(r137711, r137715);
double r137717 = r137714 / r137716;
double r137718 = 0.0625;
double r137719 = 5.0;
double r137720 = pow(r137711, r137719);
double r137721 = r137718 / r137720;
double r137722 = r137717 - r137721;
double r137723 = 0.5;
double r137724 = r137723 / r137711;
double r137725 = r137722 - r137724;
double r137726 = log(r137725);
double r137727 = 0.8999222701664713;
bool r137728 = r137711 <= r137727;
double r137729 = 1.0;
double r137730 = sqrt(r137729);
double r137731 = log(r137730);
double r137732 = -0.16666666666666666;
double r137733 = r137711 * r137711;
double r137734 = r137733 / r137729;
double r137735 = r137732 * r137734;
double r137736 = 1.0;
double r137737 = r137735 + r137736;
double r137738 = r137711 / r137730;
double r137739 = r137737 * r137738;
double r137740 = r137731 + r137739;
double r137741 = r137724 - r137717;
double r137742 = 2.0;
double r137743 = r137742 * r137711;
double r137744 = r137741 + r137743;
double r137745 = log(r137744);
double r137746 = r137728 ? r137740 : r137745;
double r137747 = r137713 ? r137726 : r137746;
return r137747;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.6 |
| Herbie | 0.2 |
if x < -1.004740488829904Initial program 62.5
Taylor expanded around -inf 0.2
Simplified0.2
if -1.004740488829904 < x < 0.8999222701664713Initial program 58.8
Taylor expanded around 0 0.2
Simplified0.2
if 0.8999222701664713 < x Initial program 32.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019325
(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)))))