\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.019295534059107000146582322486210614443:\\
\;\;\;\;\log \left(\frac{-0.0625}{{x}^{5}} + \frac{1}{x} \cdot \left(\frac{0.125}{{x}^{2}} - 0.5\right)\right)\\
\mathbf{elif}\;x \le 0.9006433647360575500684376493154559284449:\\
\;\;\;\;\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(x - 0.125 \cdot \frac{1}{{x}^{3}}\right) + \frac{0.5}{x}\right)\right)\\
\end{array}double f(double x) {
double r80608 = x;
double r80609 = r80608 * r80608;
double r80610 = 1.0;
double r80611 = r80609 + r80610;
double r80612 = sqrt(r80611);
double r80613 = r80608 + r80612;
double r80614 = log(r80613);
return r80614;
}
double f(double x) {
double r80615 = x;
double r80616 = -1.019295534059107;
bool r80617 = r80615 <= r80616;
double r80618 = 0.0625;
double r80619 = -r80618;
double r80620 = 5.0;
double r80621 = pow(r80615, r80620);
double r80622 = r80619 / r80621;
double r80623 = 1.0;
double r80624 = r80623 / r80615;
double r80625 = 0.125;
double r80626 = 2.0;
double r80627 = pow(r80615, r80626);
double r80628 = r80625 / r80627;
double r80629 = 0.5;
double r80630 = r80628 - r80629;
double r80631 = r80624 * r80630;
double r80632 = r80622 + r80631;
double r80633 = log(r80632);
double r80634 = 0.9006433647360576;
bool r80635 = r80615 <= r80634;
double r80636 = 1.0;
double r80637 = sqrt(r80636);
double r80638 = log(r80637);
double r80639 = r80615 / r80637;
double r80640 = r80638 + r80639;
double r80641 = 0.16666666666666666;
double r80642 = 3.0;
double r80643 = pow(r80615, r80642);
double r80644 = pow(r80637, r80642);
double r80645 = r80643 / r80644;
double r80646 = r80641 * r80645;
double r80647 = r80640 - r80646;
double r80648 = r80623 / r80643;
double r80649 = r80625 * r80648;
double r80650 = r80615 - r80649;
double r80651 = r80629 / r80615;
double r80652 = r80650 + r80651;
double r80653 = r80615 + r80652;
double r80654 = log(r80653);
double r80655 = r80635 ? r80647 : r80654;
double r80656 = r80617 ? r80633 : r80655;
return r80656;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 44.9 |
| Herbie | 0.2 |
if x < -1.019295534059107Initial program 62.9
Taylor expanded around -inf 0.2
Simplified0.2
if -1.019295534059107 < x < 0.9006433647360576Initial program 58.7
Taylor expanded around 0 0.3
if 0.9006433647360576 < x Initial program 32.3
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019298
(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)))))