\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.02274118080473863656720823200885206461:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 0.8828713596856151424319136822305154055357:\\
\;\;\;\;\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(x + \left(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r142373 = x;
double r142374 = r142373 * r142373;
double r142375 = 1.0;
double r142376 = r142374 + r142375;
double r142377 = sqrt(r142376);
double r142378 = r142373 + r142377;
double r142379 = log(r142378);
return r142379;
}
double f(double x) {
double r142380 = x;
double r142381 = -1.0227411808047386;
bool r142382 = r142380 <= r142381;
double r142383 = 0.125;
double r142384 = 3.0;
double r142385 = pow(r142380, r142384);
double r142386 = r142383 / r142385;
double r142387 = 0.5;
double r142388 = r142387 / r142380;
double r142389 = r142386 - r142388;
double r142390 = 0.0625;
double r142391 = 5.0;
double r142392 = pow(r142380, r142391);
double r142393 = r142390 / r142392;
double r142394 = r142389 - r142393;
double r142395 = log(r142394);
double r142396 = 0.8828713596856151;
bool r142397 = r142380 <= r142396;
double r142398 = 1.0;
double r142399 = sqrt(r142398);
double r142400 = log(r142399);
double r142401 = r142380 / r142399;
double r142402 = r142400 + r142401;
double r142403 = 0.16666666666666666;
double r142404 = pow(r142399, r142384);
double r142405 = r142385 / r142404;
double r142406 = r142403 * r142405;
double r142407 = r142402 - r142406;
double r142408 = r142388 - r142386;
double r142409 = r142380 + r142408;
double r142410 = r142380 + r142409;
double r142411 = log(r142410);
double r142412 = r142397 ? r142407 : r142411;
double r142413 = r142382 ? r142395 : r142412;
return r142413;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.6 |
| Herbie | 0.2 |
if x < -1.0227411808047386Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0227411808047386 < x < 0.8828713596856151Initial program 58.6
Taylor expanded around 0 0.3
if 0.8828713596856151 < x Initial program 32.1
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019305
(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)))))