\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 9.582810861441525300194466119307890039636 \cdot 10^{-4}:\\
\;\;\;\;\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(1 \cdot \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\right)\\
\end{array}double f(double x) {
double r150301 = x;
double r150302 = r150301 * r150301;
double r150303 = 1.0;
double r150304 = r150302 + r150303;
double r150305 = sqrt(r150304);
double r150306 = r150301 + r150305;
double r150307 = log(r150306);
return r150307;
}
double f(double x) {
double r150308 = x;
double r150309 = -0.9993980925116871;
bool r150310 = r150308 <= r150309;
double r150311 = 0.125;
double r150312 = 3.0;
double r150313 = pow(r150308, r150312);
double r150314 = r150311 / r150313;
double r150315 = 0.5;
double r150316 = r150315 / r150308;
double r150317 = 0.0625;
double r150318 = -r150317;
double r150319 = 5.0;
double r150320 = pow(r150308, r150319);
double r150321 = r150318 / r150320;
double r150322 = r150316 - r150321;
double r150323 = r150314 - r150322;
double r150324 = log(r150323);
double r150325 = 0.0009582810861441525;
bool r150326 = r150308 <= r150325;
double r150327 = 1.0;
double r150328 = sqrt(r150327);
double r150329 = log(r150328);
double r150330 = r150308 / r150328;
double r150331 = r150329 + r150330;
double r150332 = 0.16666666666666666;
double r150333 = pow(r150328, r150312);
double r150334 = r150313 / r150333;
double r150335 = r150332 * r150334;
double r150336 = r150331 - r150335;
double r150337 = 1.0;
double r150338 = hypot(r150308, r150328);
double r150339 = r150338 + r150308;
double r150340 = r150337 * r150339;
double r150341 = log(r150340);
double r150342 = r150326 ? r150336 : r150341;
double r150343 = r150310 ? r150324 : r150342;
return r150343;
}




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.0009582810861441525Initial program 58.9
Taylor expanded around 0 0.2
if 0.0009582810861441525 < x Initial program 32.6
rmApplied *-un-lft-identity32.6
Applied *-un-lft-identity32.6
Applied distribute-lft-out32.6
Simplified0.1
Final simplification0.2
herbie shell --seed 2019353 +o rules:numerics
(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)))))