\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.014356783985294052641279449744615703821:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8864725828659493211958420033624861389399:\\
\;\;\;\;\frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}} + \log \left(\sqrt{1}\right)\\
\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 r91644 = x;
double r91645 = r91644 * r91644;
double r91646 = 1.0;
double r91647 = r91645 + r91646;
double r91648 = sqrt(r91647);
double r91649 = r91644 + r91648;
double r91650 = log(r91649);
return r91650;
}
double f(double x) {
double r91651 = x;
double r91652 = -1.014356783985294;
bool r91653 = r91651 <= r91652;
double r91654 = 0.125;
double r91655 = 3.0;
double r91656 = pow(r91651, r91655);
double r91657 = r91654 / r91656;
double r91658 = 0.0625;
double r91659 = 5.0;
double r91660 = pow(r91651, r91659);
double r91661 = r91658 / r91660;
double r91662 = r91657 - r91661;
double r91663 = 0.5;
double r91664 = r91663 / r91651;
double r91665 = r91662 - r91664;
double r91666 = log(r91665);
double r91667 = 0.8864725828659493;
bool r91668 = r91651 <= r91667;
double r91669 = 1.0;
double r91670 = -0.16666666666666666;
double r91671 = r91669 / r91670;
double r91672 = r91656 / r91671;
double r91673 = r91651 + r91672;
double r91674 = sqrt(r91669);
double r91675 = r91673 / r91674;
double r91676 = log(r91674);
double r91677 = r91675 + r91676;
double r91678 = r91651 - r91657;
double r91679 = r91664 + r91678;
double r91680 = r91651 + r91679;
double r91681 = log(r91680);
double r91682 = r91668 ? r91677 : r91681;
double r91683 = r91653 ? r91666 : r91682;
return r91683;
}




Bits error versus x
Results
| Original | 52.9 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.014356783985294Initial program 62.9
Taylor expanded around -inf 0.3
Simplified0.3
if -1.014356783985294 < x < 0.8864725828659493Initial program 58.5
Taylor expanded around 0 0.3
Simplified0.3
rmApplied *-un-lft-identity0.3
Applied associate-*l*0.3
Simplified0.3
if 0.8864725828659493 < x Initial program 31.3
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019306
(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)))))