\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.9958177061725915768519712401030119508505:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8810785844419956047701703027996700257063:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r134630 = x;
double r134631 = r134630 * r134630;
double r134632 = 1.0;
double r134633 = r134631 + r134632;
double r134634 = sqrt(r134633);
double r134635 = r134630 + r134634;
double r134636 = log(r134635);
return r134636;
}
double f(double x) {
double r134637 = x;
double r134638 = -0.9958177061725916;
bool r134639 = r134637 <= r134638;
double r134640 = 0.125;
double r134641 = 3.0;
double r134642 = pow(r134637, r134641);
double r134643 = r134640 / r134642;
double r134644 = 0.0625;
double r134645 = 5.0;
double r134646 = pow(r134637, r134645);
double r134647 = r134644 / r134646;
double r134648 = r134643 - r134647;
double r134649 = 0.5;
double r134650 = r134649 / r134637;
double r134651 = r134648 - r134650;
double r134652 = log(r134651);
double r134653 = 0.8810785844419956;
bool r134654 = r134637 <= r134653;
double r134655 = 1.0;
double r134656 = sqrt(r134655);
double r134657 = log(r134656);
double r134658 = -0.16666666666666666;
double r134659 = r134637 * r134637;
double r134660 = r134659 / r134655;
double r134661 = r134658 * r134660;
double r134662 = 1.0;
double r134663 = r134661 + r134662;
double r134664 = r134637 / r134656;
double r134665 = r134663 * r134664;
double r134666 = r134657 + r134665;
double r134667 = r134637 - r134643;
double r134668 = r134650 + r134667;
double r134669 = r134637 + r134668;
double r134670 = log(r134669);
double r134671 = r134654 ? r134666 : r134670;
double r134672 = r134639 ? r134652 : r134671;
return r134672;
}




Bits error versus x
Results
| Original | 53.5 |
|---|---|
| Target | 45.7 |
| Herbie | 0.3 |
if x < -0.9958177061725916Initial program 63.2
Taylor expanded around -inf 0.2
Simplified0.2
if -0.9958177061725916 < x < 0.8810785844419956Initial program 58.5
Taylor expanded around 0 0.3
Simplified0.3
if 0.8810785844419956 < x Initial program 32.5
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019347
(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)))))