\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.997323780249505298:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.896888293617614685:\\
\;\;\;\;\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(\frac{0.5}{x} - \left(\frac{0.125}{{x}^{3}} - 2 \cdot x\right)\right)\\
\end{array}double f(double x) {
double r175862 = x;
double r175863 = r175862 * r175862;
double r175864 = 1.0;
double r175865 = r175863 + r175864;
double r175866 = sqrt(r175865);
double r175867 = r175862 + r175866;
double r175868 = log(r175867);
return r175868;
}
double f(double x) {
double r175869 = x;
double r175870 = -0.9973237802495053;
bool r175871 = r175869 <= r175870;
double r175872 = 0.125;
double r175873 = 3.0;
double r175874 = pow(r175869, r175873);
double r175875 = r175872 / r175874;
double r175876 = 0.5;
double r175877 = r175876 / r175869;
double r175878 = 0.0625;
double r175879 = -r175878;
double r175880 = 5.0;
double r175881 = pow(r175869, r175880);
double r175882 = r175879 / r175881;
double r175883 = r175877 - r175882;
double r175884 = r175875 - r175883;
double r175885 = log(r175884);
double r175886 = 0.8968882936176147;
bool r175887 = r175869 <= r175886;
double r175888 = 1.0;
double r175889 = sqrt(r175888);
double r175890 = log(r175889);
double r175891 = r175869 / r175889;
double r175892 = r175890 + r175891;
double r175893 = 0.16666666666666666;
double r175894 = pow(r175889, r175873);
double r175895 = r175874 / r175894;
double r175896 = r175893 * r175895;
double r175897 = r175892 - r175896;
double r175898 = 2.0;
double r175899 = r175898 * r175869;
double r175900 = r175875 - r175899;
double r175901 = r175877 - r175900;
double r175902 = log(r175901);
double r175903 = r175887 ? r175897 : r175902;
double r175904 = r175871 ? r175885 : r175903;
return r175904;
}




Bits error versus x
Results
| Original | 52.9 |
|---|---|
| Target | 45.3 |
| Herbie | 0.3 |
if x < -0.9973237802495053Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
if -0.9973237802495053 < x < 0.8968882936176147Initial program 58.5
Taylor expanded around 0 0.4
if 0.8968882936176147 < x Initial program 31.3
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.3
herbie shell --seed 2020056
(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)))))