\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.99895493447090078:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.90017583502977816:\\
\;\;\;\;\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(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right) + x\right)\right)\\
\end{array}double f(double x) {
double r151506 = x;
double r151507 = r151506 * r151506;
double r151508 = 1.0;
double r151509 = r151507 + r151508;
double r151510 = sqrt(r151509);
double r151511 = r151506 + r151510;
double r151512 = log(r151511);
return r151512;
}
double f(double x) {
double r151513 = x;
double r151514 = -0.9989549344709008;
bool r151515 = r151513 <= r151514;
double r151516 = 0.125;
double r151517 = 3.0;
double r151518 = pow(r151513, r151517);
double r151519 = r151516 / r151518;
double r151520 = 0.5;
double r151521 = r151520 / r151513;
double r151522 = 0.0625;
double r151523 = 5.0;
double r151524 = pow(r151513, r151523);
double r151525 = r151522 / r151524;
double r151526 = r151521 + r151525;
double r151527 = r151519 - r151526;
double r151528 = log(r151527);
double r151529 = 0.9001758350297782;
bool r151530 = r151513 <= r151529;
double r151531 = 1.0;
double r151532 = sqrt(r151531);
double r151533 = log(r151532);
double r151534 = r151513 / r151532;
double r151535 = r151533 + r151534;
double r151536 = 0.16666666666666666;
double r151537 = pow(r151532, r151517);
double r151538 = r151518 / r151537;
double r151539 = r151536 * r151538;
double r151540 = r151535 - r151539;
double r151541 = r151521 - r151519;
double r151542 = r151541 + r151513;
double r151543 = r151513 + r151542;
double r151544 = log(r151543);
double r151545 = r151530 ? r151540 : r151544;
double r151546 = r151515 ? r151528 : r151545;
return r151546;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.5 |
| Herbie | 0.3 |
if x < -0.9989549344709008Initial program 62.8
Taylor expanded around -inf 0.3
Simplified0.3
if -0.9989549344709008 < x < 0.9001758350297782Initial program 58.6
Taylor expanded around 0 0.2
if 0.9001758350297782 < x Initial program 32.1
Taylor expanded around inf 0.4
Simplified0.4
Final simplification0.3
herbie shell --seed 2020046
(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)))))