\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 0.8861387644120477524722900852793827652931:\\
\;\;\;\;\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(\frac{0.5}{x} - \left(\frac{0.125}{{x}^{3}} - 2 \cdot x\right)\right)\\
\end{array}double f(double x) {
double r211472 = x;
double r211473 = r211472 * r211472;
double r211474 = 1.0;
double r211475 = r211473 + r211474;
double r211476 = sqrt(r211475);
double r211477 = r211472 + r211476;
double r211478 = log(r211477);
return r211478;
}
double f(double x) {
double r211479 = x;
double r211480 = -0.9993980925116871;
bool r211481 = r211479 <= r211480;
double r211482 = 0.125;
double r211483 = 3.0;
double r211484 = pow(r211479, r211483);
double r211485 = r211482 / r211484;
double r211486 = 0.5;
double r211487 = r211486 / r211479;
double r211488 = 0.0625;
double r211489 = -r211488;
double r211490 = 5.0;
double r211491 = pow(r211479, r211490);
double r211492 = r211489 / r211491;
double r211493 = r211487 - r211492;
double r211494 = r211485 - r211493;
double r211495 = log(r211494);
double r211496 = 0.8861387644120478;
bool r211497 = r211479 <= r211496;
double r211498 = 1.0;
double r211499 = sqrt(r211498);
double r211500 = log(r211499);
double r211501 = r211479 / r211499;
double r211502 = r211500 + r211501;
double r211503 = 0.16666666666666666;
double r211504 = pow(r211499, r211483);
double r211505 = r211484 / r211504;
double r211506 = r211503 * r211505;
double r211507 = r211502 - r211506;
double r211508 = 2.0;
double r211509 = r211508 * r211479;
double r211510 = r211485 - r211509;
double r211511 = r211487 - r211510;
double r211512 = log(r211511);
double r211513 = r211497 ? r211507 : r211512;
double r211514 = r211481 ? r211495 : r211513;
return r211514;
}




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.8861387644120478Initial program 58.7
Taylor expanded around 0 0.3
if 0.8861387644120478 < x Initial program 32.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019353
(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)))))