\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.002814715336328044159586170280817896128:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.9017023301953626113203199565759859979153:\\
\;\;\;\;\frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}} + \log \left(\sqrt{1}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r93361 = x;
double r93362 = r93361 * r93361;
double r93363 = 1.0;
double r93364 = r93362 + r93363;
double r93365 = sqrt(r93364);
double r93366 = r93361 + r93365;
double r93367 = log(r93366);
return r93367;
}
double f(double x) {
double r93368 = x;
double r93369 = -1.002814715336328;
bool r93370 = r93368 <= r93369;
double r93371 = 0.125;
double r93372 = 3.0;
double r93373 = pow(r93368, r93372);
double r93374 = r93371 / r93373;
double r93375 = 0.0625;
double r93376 = 5.0;
double r93377 = pow(r93368, r93376);
double r93378 = r93375 / r93377;
double r93379 = r93374 - r93378;
double r93380 = 0.5;
double r93381 = r93380 / r93368;
double r93382 = r93379 - r93381;
double r93383 = log(r93382);
double r93384 = 0.9017023301953626;
bool r93385 = r93368 <= r93384;
double r93386 = 1.0;
double r93387 = -0.16666666666666666;
double r93388 = r93386 / r93387;
double r93389 = r93373 / r93388;
double r93390 = r93368 + r93389;
double r93391 = sqrt(r93386);
double r93392 = r93390 / r93391;
double r93393 = log(r93391);
double r93394 = r93392 + r93393;
double r93395 = r93368 - r93374;
double r93396 = r93381 + r93395;
double r93397 = r93368 + r93396;
double r93398 = log(r93397);
double r93399 = r93385 ? r93394 : r93398;
double r93400 = r93370 ? r93383 : r93399;
return r93400;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.2 |
| Herbie | 0.2 |
if x < -1.002814715336328Initial program 63.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.002814715336328 < x < 0.9017023301953626Initial program 58.7
Taylor expanded around 0 0.2
Simplified0.2
rmApplied *-un-lft-identity0.2
Applied associate-*l*0.2
Simplified0.2
if 0.9017023301953626 < x Initial program 32.2
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019323
(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)))))