\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.039166247669711884427101722394581884146:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.8781417519921208558741909655509516596794:\\
\;\;\;\;\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(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r150383 = x;
double r150384 = r150383 * r150383;
double r150385 = 1.0;
double r150386 = r150384 + r150385;
double r150387 = sqrt(r150386);
double r150388 = r150383 + r150387;
double r150389 = log(r150388);
return r150389;
}
double f(double x) {
double r150390 = x;
double r150391 = -1.0391662476697119;
bool r150392 = r150390 <= r150391;
double r150393 = 0.125;
double r150394 = 3.0;
double r150395 = pow(r150390, r150394);
double r150396 = r150393 / r150395;
double r150397 = 0.5;
double r150398 = r150397 / r150390;
double r150399 = 0.0625;
double r150400 = -r150399;
double r150401 = 5.0;
double r150402 = pow(r150390, r150401);
double r150403 = r150400 / r150402;
double r150404 = r150398 - r150403;
double r150405 = r150396 - r150404;
double r150406 = log(r150405);
double r150407 = 0.8781417519921209;
bool r150408 = r150390 <= r150407;
double r150409 = 1.0;
double r150410 = sqrt(r150409);
double r150411 = log(r150410);
double r150412 = r150390 / r150410;
double r150413 = r150411 + r150412;
double r150414 = 0.16666666666666666;
double r150415 = pow(r150410, r150394);
double r150416 = r150395 / r150415;
double r150417 = r150414 * r150416;
double r150418 = r150413 - r150417;
double r150419 = r150390 + r150398;
double r150420 = r150419 - r150396;
double r150421 = r150390 + r150420;
double r150422 = log(r150421);
double r150423 = r150408 ? r150418 : r150422;
double r150424 = r150392 ? r150406 : r150423;
return r150424;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.2 |
| Herbie | 0.3 |
if x < -1.0391662476697119Initial program 63.0
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0391662476697119 < x < 0.8781417519921209Initial program 58.5
Taylor expanded around 0 0.3
if 0.8781417519921209 < x Initial program 32.0
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019362
(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)))))