\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.99900093148113323:\\
\;\;\;\;\log \left(\sqrt{\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)}\right) + \log \left(\sqrt{\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)}\right)\\
\mathbf{elif}\;x \le 0.892729433657427074:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r135795 = x;
double r135796 = r135795 * r135795;
double r135797 = 1.0;
double r135798 = r135796 + r135797;
double r135799 = sqrt(r135798);
double r135800 = r135795 + r135799;
double r135801 = log(r135800);
return r135801;
}
double f(double x) {
double r135802 = x;
double r135803 = -0.9990009314811332;
bool r135804 = r135802 <= r135803;
double r135805 = 0.125;
double r135806 = 3.0;
double r135807 = pow(r135802, r135806);
double r135808 = r135805 / r135807;
double r135809 = 0.5;
double r135810 = r135809 / r135802;
double r135811 = 0.0625;
double r135812 = 5.0;
double r135813 = pow(r135802, r135812);
double r135814 = r135811 / r135813;
double r135815 = r135810 + r135814;
double r135816 = r135808 - r135815;
double r135817 = sqrt(r135816);
double r135818 = log(r135817);
double r135819 = r135818 + r135818;
double r135820 = 0.8927294336574271;
bool r135821 = r135802 <= r135820;
double r135822 = 1.0;
double r135823 = sqrt(r135822);
double r135824 = log(r135823);
double r135825 = r135802 / r135823;
double r135826 = r135824 + r135825;
double r135827 = 0.16666666666666666;
double r135828 = pow(r135823, r135806);
double r135829 = r135807 / r135828;
double r135830 = r135827 * r135829;
double r135831 = r135826 - r135830;
double r135832 = r135802 - r135808;
double r135833 = r135810 + r135832;
double r135834 = r135802 + r135833;
double r135835 = log(r135834);
double r135836 = r135821 ? r135831 : r135835;
double r135837 = r135804 ? r135819 : r135836;
return r135837;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.1 |
| Herbie | 0.2 |
if x < -0.9990009314811332Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
rmApplied add-sqr-sqrt0.1
Applied log-prod0.1
if -0.9990009314811332 < x < 0.8927294336574271Initial program 58.7
Taylor expanded around 0 0.3
if 0.8927294336574271 < x Initial program 31.4
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2020042
(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)))))