\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0090202414523164:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.963811647786171011:\\
\;\;\;\;\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 2 - \left(\left(\frac{0.09375}{{x}^{4}} - \log x\right) - \frac{\frac{0.25}{x}}{x}\right)\\
\end{array}double f(double x) {
double r244366 = x;
double r244367 = r244366 * r244366;
double r244368 = 1.0;
double r244369 = r244367 + r244368;
double r244370 = sqrt(r244369);
double r244371 = r244366 + r244370;
double r244372 = log(r244371);
return r244372;
}
double f(double x) {
double r244373 = x;
double r244374 = -1.0090202414523164;
bool r244375 = r244373 <= r244374;
double r244376 = 0.125;
double r244377 = 3.0;
double r244378 = pow(r244373, r244377);
double r244379 = r244376 / r244378;
double r244380 = 0.5;
double r244381 = r244380 / r244373;
double r244382 = 0.0625;
double r244383 = -r244382;
double r244384 = 5.0;
double r244385 = pow(r244373, r244384);
double r244386 = r244383 / r244385;
double r244387 = r244381 - r244386;
double r244388 = r244379 - r244387;
double r244389 = log(r244388);
double r244390 = 0.963811647786171;
bool r244391 = r244373 <= r244390;
double r244392 = 1.0;
double r244393 = sqrt(r244392);
double r244394 = log(r244393);
double r244395 = r244373 / r244393;
double r244396 = r244394 + r244395;
double r244397 = 0.16666666666666666;
double r244398 = pow(r244393, r244377);
double r244399 = r244378 / r244398;
double r244400 = r244397 * r244399;
double r244401 = r244396 - r244400;
double r244402 = 2.0;
double r244403 = log(r244402);
double r244404 = 0.09375;
double r244405 = 4.0;
double r244406 = pow(r244373, r244405);
double r244407 = r244404 / r244406;
double r244408 = log(r244373);
double r244409 = r244407 - r244408;
double r244410 = 0.25;
double r244411 = r244410 / r244373;
double r244412 = r244411 / r244373;
double r244413 = r244409 - r244412;
double r244414 = r244403 - r244413;
double r244415 = r244391 ? r244401 : r244414;
double r244416 = r244375 ? r244389 : r244415;
return r244416;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.5 |
| Herbie | 0.3 |
if x < -1.0090202414523164Initial program 62.9
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0090202414523164 < x < 0.963811647786171Initial program 58.7
Taylor expanded around 0 0.4
if 0.963811647786171 < x Initial program 32.3
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020059
(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)))))