\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.02122159882250018725358131632674485445:\\
\;\;\;\;\log \left(\frac{\frac{0.125}{x}}{x \cdot x} - \left(\frac{0.0625}{{x}^{5}} + \frac{0.5}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.8950674725377756324462552584009245038033:\\
\;\;\;\;\frac{x}{\sqrt{1}} + \left(\log \left(\sqrt{1}\right) - \frac{\frac{1}{6}}{\frac{\sqrt{1}}{\frac{\left(x \cdot x\right) \cdot x}{1}}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{\frac{0.125}{x}}{x \cdot x}\right)\right)\right)\\
\end{array}double f(double x) {
double r7712760 = x;
double r7712761 = r7712760 * r7712760;
double r7712762 = 1.0;
double r7712763 = r7712761 + r7712762;
double r7712764 = sqrt(r7712763);
double r7712765 = r7712760 + r7712764;
double r7712766 = log(r7712765);
return r7712766;
}
double f(double x) {
double r7712767 = x;
double r7712768 = -1.0212215988225002;
bool r7712769 = r7712767 <= r7712768;
double r7712770 = 0.125;
double r7712771 = r7712770 / r7712767;
double r7712772 = r7712767 * r7712767;
double r7712773 = r7712771 / r7712772;
double r7712774 = 0.0625;
double r7712775 = 5.0;
double r7712776 = pow(r7712767, r7712775);
double r7712777 = r7712774 / r7712776;
double r7712778 = 0.5;
double r7712779 = r7712778 / r7712767;
double r7712780 = r7712777 + r7712779;
double r7712781 = r7712773 - r7712780;
double r7712782 = log(r7712781);
double r7712783 = 0.8950674725377756;
bool r7712784 = r7712767 <= r7712783;
double r7712785 = 1.0;
double r7712786 = sqrt(r7712785);
double r7712787 = r7712767 / r7712786;
double r7712788 = log(r7712786);
double r7712789 = 0.16666666666666666;
double r7712790 = r7712772 * r7712767;
double r7712791 = r7712790 / r7712785;
double r7712792 = r7712786 / r7712791;
double r7712793 = r7712789 / r7712792;
double r7712794 = r7712788 - r7712793;
double r7712795 = r7712787 + r7712794;
double r7712796 = r7712767 - r7712773;
double r7712797 = r7712779 + r7712796;
double r7712798 = r7712767 + r7712797;
double r7712799 = log(r7712798);
double r7712800 = r7712784 ? r7712795 : r7712799;
double r7712801 = r7712769 ? r7712782 : r7712800;
return r7712801;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 45.3 |
| Herbie | 0.2 |
if x < -1.0212215988225002Initial program 62.8
Taylor expanded around -inf 0.3
Simplified0.3
if -1.0212215988225002 < x < 0.8950674725377756Initial program 58.6
Taylor expanded around 0 0.3
Simplified0.3
if 0.8950674725377756 < x Initial program 32.1
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019169
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0.0) (log (/ -1.0 (- x (sqrt (+ (* x x) 1.0))))) (log (+ x (sqrt (+ (* x x) 1.0)))))
(log (+ x (sqrt (+ (* x x) 1.0)))))