\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.9982267368695869613759441563161090016365:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.9479026978334682551619039259094279259443:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\left(\log 2 + \frac{0.25}{x \cdot x}\right) - \left(\frac{0.09375}{{x}^{4}} - \log x\right)\\
\end{array}double f(double x) {
double r101830 = x;
double r101831 = r101830 * r101830;
double r101832 = 1.0;
double r101833 = r101831 + r101832;
double r101834 = sqrt(r101833);
double r101835 = r101830 + r101834;
double r101836 = log(r101835);
return r101836;
}
double f(double x) {
double r101837 = x;
double r101838 = -0.998226736869587;
bool r101839 = r101837 <= r101838;
double r101840 = 0.125;
double r101841 = 3.0;
double r101842 = pow(r101837, r101841);
double r101843 = r101840 / r101842;
double r101844 = 0.0625;
double r101845 = 5.0;
double r101846 = pow(r101837, r101845);
double r101847 = r101844 / r101846;
double r101848 = r101843 - r101847;
double r101849 = 0.5;
double r101850 = r101849 / r101837;
double r101851 = r101848 - r101850;
double r101852 = log(r101851);
double r101853 = 0.9479026978334683;
bool r101854 = r101837 <= r101853;
double r101855 = 1.0;
double r101856 = sqrt(r101855);
double r101857 = log(r101856);
double r101858 = -0.16666666666666666;
double r101859 = r101837 * r101837;
double r101860 = r101859 / r101855;
double r101861 = r101858 * r101860;
double r101862 = 1.0;
double r101863 = r101861 + r101862;
double r101864 = r101837 / r101856;
double r101865 = r101863 * r101864;
double r101866 = r101857 + r101865;
double r101867 = 2.0;
double r101868 = log(r101867);
double r101869 = 0.25;
double r101870 = r101869 / r101859;
double r101871 = r101868 + r101870;
double r101872 = 0.09375;
double r101873 = 4.0;
double r101874 = pow(r101837, r101873);
double r101875 = r101872 / r101874;
double r101876 = log(r101837);
double r101877 = r101875 - r101876;
double r101878 = r101871 - r101877;
double r101879 = r101854 ? r101866 : r101878;
double r101880 = r101839 ? r101852 : r101879;
return r101880;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -0.998226736869587Initial program 62.6
Taylor expanded around -inf 0.3
Simplified0.3
if -0.998226736869587 < x < 0.9479026978334683Initial program 58.7
Taylor expanded around 0 0.3
Simplified0.3
if 0.9479026978334683 < x Initial program 31.9
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019304
(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)))))