\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.065310111108762:\\
\;\;\;\;\log \left(\frac{\frac{-1}{2}}{x} - \left(\frac{\frac{1}{16}}{{x}^{5}} - \frac{\frac{\frac{\frac{1}{8}}{x}}{x}}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.9649364315232305:\\
\;\;\;\;\frac{3}{40} \cdot {x}^{5} + \left(x + \left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\frac{\frac{1}{2}}{x} - \left(\frac{\frac{1}{8}}{x \cdot \left(x \cdot x\right)} - x\right)\right) + x\right)\\
\end{array}double f(double x) {
double r32678918 = x;
double r32678919 = r32678918 * r32678918;
double r32678920 = 1.0;
double r32678921 = r32678919 + r32678920;
double r32678922 = sqrt(r32678921);
double r32678923 = r32678918 + r32678922;
double r32678924 = log(r32678923);
return r32678924;
}
double f(double x) {
double r32678925 = x;
double r32678926 = -1.065310111108762;
bool r32678927 = r32678925 <= r32678926;
double r32678928 = -0.5;
double r32678929 = r32678928 / r32678925;
double r32678930 = 0.0625;
double r32678931 = 5.0;
double r32678932 = pow(r32678925, r32678931);
double r32678933 = r32678930 / r32678932;
double r32678934 = 0.125;
double r32678935 = r32678934 / r32678925;
double r32678936 = r32678935 / r32678925;
double r32678937 = r32678936 / r32678925;
double r32678938 = r32678933 - r32678937;
double r32678939 = r32678929 - r32678938;
double r32678940 = log(r32678939);
double r32678941 = 0.9649364315232305;
bool r32678942 = r32678925 <= r32678941;
double r32678943 = 0.075;
double r32678944 = r32678943 * r32678932;
double r32678945 = -0.16666666666666666;
double r32678946 = r32678925 * r32678945;
double r32678947 = r32678925 * r32678925;
double r32678948 = r32678946 * r32678947;
double r32678949 = r32678925 + r32678948;
double r32678950 = r32678944 + r32678949;
double r32678951 = 0.5;
double r32678952 = r32678951 / r32678925;
double r32678953 = r32678925 * r32678947;
double r32678954 = r32678934 / r32678953;
double r32678955 = r32678954 - r32678925;
double r32678956 = r32678952 - r32678955;
double r32678957 = r32678956 + r32678925;
double r32678958 = log(r32678957);
double r32678959 = r32678942 ? r32678950 : r32678958;
double r32678960 = r32678927 ? r32678940 : r32678959;
return r32678960;
}




Bits error versus x
Results
| Original | 52.7 |
|---|---|
| Target | 44.8 |
| Herbie | 0.2 |
if x < -1.065310111108762Initial program 62.0
Taylor expanded around -inf 0.1
Simplified0.1
if -1.065310111108762 < x < 0.9649364315232305Initial program 58.4
Taylor expanded around 0 0.2
Simplified0.2
if 0.9649364315232305 < x Initial program 30.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019125
(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)))))