\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.9993980925116870972502169934159610420465:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.8861387644120477524722900852793827652931:\\
\;\;\;\;\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(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r189894 = x;
double r189895 = r189894 * r189894;
double r189896 = 1.0;
double r189897 = r189895 + r189896;
double r189898 = sqrt(r189897);
double r189899 = r189894 + r189898;
double r189900 = log(r189899);
return r189900;
}
double f(double x) {
double r189901 = x;
double r189902 = -0.9993980925116871;
bool r189903 = r189901 <= r189902;
double r189904 = 0.125;
double r189905 = 3.0;
double r189906 = pow(r189901, r189905);
double r189907 = r189904 / r189906;
double r189908 = 0.5;
double r189909 = r189908 / r189901;
double r189910 = 0.0625;
double r189911 = -r189910;
double r189912 = 5.0;
double r189913 = pow(r189901, r189912);
double r189914 = r189911 / r189913;
double r189915 = r189909 - r189914;
double r189916 = r189907 - r189915;
double r189917 = log(r189916);
double r189918 = 0.8861387644120478;
bool r189919 = r189901 <= r189918;
double r189920 = 1.0;
double r189921 = sqrt(r189920);
double r189922 = log(r189921);
double r189923 = r189901 / r189921;
double r189924 = r189922 + r189923;
double r189925 = 0.16666666666666666;
double r189926 = pow(r189921, r189905);
double r189927 = r189906 / r189926;
double r189928 = r189925 * r189927;
double r189929 = r189924 - r189928;
double r189930 = r189901 + r189909;
double r189931 = r189930 - r189907;
double r189932 = r189901 + r189931;
double r189933 = log(r189932);
double r189934 = r189919 ? r189929 : r189933;
double r189935 = r189903 ? r189917 : r189934;
return r189935;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.7 |
| Herbie | 0.2 |
if x < -0.9993980925116871Initial program 62.9
Taylor expanded around -inf 0.2
Simplified0.2
if -0.9993980925116871 < x < 0.8861387644120478Initial program 58.7
Taylor expanded around 0 0.3
if 0.8861387644120478 < x Initial program 32.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019353
(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)))))