\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(\frac{0.5}{x} - \left(\frac{0.125}{{x}^{3}} - 2 \cdot x\right)\right)\\
\end{array}double f(double x) {
double r156669 = x;
double r156670 = r156669 * r156669;
double r156671 = 1.0;
double r156672 = r156670 + r156671;
double r156673 = sqrt(r156672);
double r156674 = r156669 + r156673;
double r156675 = log(r156674);
return r156675;
}
double f(double x) {
double r156676 = x;
double r156677 = -0.9989549344709008;
bool r156678 = r156676 <= r156677;
double r156679 = 0.125;
double r156680 = 3.0;
double r156681 = pow(r156676, r156680);
double r156682 = r156679 / r156681;
double r156683 = 0.5;
double r156684 = r156683 / r156676;
double r156685 = 0.0625;
double r156686 = -r156685;
double r156687 = 5.0;
double r156688 = pow(r156676, r156687);
double r156689 = r156686 / r156688;
double r156690 = r156684 - r156689;
double r156691 = r156682 - r156690;
double r156692 = log(r156691);
double r156693 = 0.9001758350297782;
bool r156694 = r156676 <= r156693;
double r156695 = 1.0;
double r156696 = sqrt(r156695);
double r156697 = log(r156696);
double r156698 = r156676 / r156696;
double r156699 = r156697 + r156698;
double r156700 = 0.16666666666666666;
double r156701 = pow(r156696, r156680);
double r156702 = r156681 / r156701;
double r156703 = r156700 * r156702;
double r156704 = r156699 - r156703;
double r156705 = 2.0;
double r156706 = r156705 * r156676;
double r156707 = r156682 - r156706;
double r156708 = r156684 - r156707;
double r156709 = log(r156708);
double r156710 = r156694 ? r156704 : r156709;
double r156711 = r156678 ? r156692 : r156710;
return r156711;
}




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)))))