\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0580774043529224:\\
\;\;\;\;\log \left(\frac{\frac{-1}{16}}{{x}^{5}} + \left(\frac{\frac{1}{8}}{x \cdot \left(x \cdot x\right)} + \frac{\frac{-1}{2}}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.9441797120105823:\\
\;\;\;\;\left(x + \left(x \cdot \left(x \cdot x\right)\right) \cdot \frac{-1}{6}\right) + {x}^{5} \cdot \frac{3}{40}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(x + \left(\frac{\frac{1}{2}}{x} - \frac{\frac{1}{8}}{x \cdot \left(x \cdot x\right)}\right)\right) + x\right)\\
\end{array}double f(double x) {
double r3194896 = x;
double r3194897 = r3194896 * r3194896;
double r3194898 = 1.0;
double r3194899 = r3194897 + r3194898;
double r3194900 = sqrt(r3194899);
double r3194901 = r3194896 + r3194900;
double r3194902 = log(r3194901);
return r3194902;
}
double f(double x) {
double r3194903 = x;
double r3194904 = -1.0580774043529224;
bool r3194905 = r3194903 <= r3194904;
double r3194906 = -0.0625;
double r3194907 = 5.0;
double r3194908 = pow(r3194903, r3194907);
double r3194909 = r3194906 / r3194908;
double r3194910 = 0.125;
double r3194911 = r3194903 * r3194903;
double r3194912 = r3194903 * r3194911;
double r3194913 = r3194910 / r3194912;
double r3194914 = -0.5;
double r3194915 = r3194914 / r3194903;
double r3194916 = r3194913 + r3194915;
double r3194917 = r3194909 + r3194916;
double r3194918 = log(r3194917);
double r3194919 = 0.9441797120105823;
bool r3194920 = r3194903 <= r3194919;
double r3194921 = -0.16666666666666666;
double r3194922 = r3194912 * r3194921;
double r3194923 = r3194903 + r3194922;
double r3194924 = 0.075;
double r3194925 = r3194908 * r3194924;
double r3194926 = r3194923 + r3194925;
double r3194927 = 0.5;
double r3194928 = r3194927 / r3194903;
double r3194929 = r3194928 - r3194913;
double r3194930 = r3194903 + r3194929;
double r3194931 = r3194930 + r3194903;
double r3194932 = log(r3194931);
double r3194933 = r3194920 ? r3194926 : r3194932;
double r3194934 = r3194905 ? r3194918 : r3194933;
return r3194934;
}




Bits error versus x
Results
| Original | 52.6 |
|---|---|
| Target | 45.1 |
| Herbie | 0.2 |
if x < -1.0580774043529224Initial program 61.8
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0580774043529224 < x < 0.9441797120105823Initial program 58.7
Taylor expanded around 0 0.2
Simplified0.2
if 0.9441797120105823 < x Initial program 30.7
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019154
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))
(log (+ x (sqrt (+ (* x x) 1)))))