\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.017049376431383045371603657258674502373:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.8981400227354686682801343522442039102316:\\
\;\;\;\;\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(\left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right) + 2 \cdot x\right)\\
\end{array}double f(double x) {
double r134521 = x;
double r134522 = r134521 * r134521;
double r134523 = 1.0;
double r134524 = r134522 + r134523;
double r134525 = sqrt(r134524);
double r134526 = r134521 + r134525;
double r134527 = log(r134526);
return r134527;
}
double f(double x) {
double r134528 = x;
double r134529 = -1.017049376431383;
bool r134530 = r134528 <= r134529;
double r134531 = 0.125;
double r134532 = 3.0;
double r134533 = pow(r134528, r134532);
double r134534 = r134531 / r134533;
double r134535 = 0.5;
double r134536 = r134535 / r134528;
double r134537 = 0.0625;
double r134538 = 5.0;
double r134539 = pow(r134528, r134538);
double r134540 = r134537 / r134539;
double r134541 = r134536 + r134540;
double r134542 = r134534 - r134541;
double r134543 = log(r134542);
double r134544 = 0.8981400227354687;
bool r134545 = r134528 <= r134544;
double r134546 = 1.0;
double r134547 = sqrt(r134546);
double r134548 = log(r134547);
double r134549 = r134528 / r134547;
double r134550 = r134548 + r134549;
double r134551 = 0.16666666666666666;
double r134552 = pow(r134547, r134532);
double r134553 = r134533 / r134552;
double r134554 = r134551 * r134553;
double r134555 = r134550 - r134554;
double r134556 = r134536 - r134534;
double r134557 = 2.0;
double r134558 = r134557 * r134528;
double r134559 = r134556 + r134558;
double r134560 = log(r134559);
double r134561 = r134545 ? r134555 : r134560;
double r134562 = r134530 ? r134543 : r134561;
return r134562;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.017049376431383Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.017049376431383 < x < 0.8981400227354687Initial program 58.6
Taylor expanded around 0 0.3
if 0.8981400227354687 < x Initial program 32.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.3
herbie shell --seed 2019303
(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)))))