\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.02026546429140219:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.00100879714941640706:\\
\;\;\;\;\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 + \sqrt{1} \cdot \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\
\end{array}double f(double x) {
double r193783 = x;
double r193784 = r193783 * r193783;
double r193785 = 1.0;
double r193786 = r193784 + r193785;
double r193787 = sqrt(r193786);
double r193788 = r193783 + r193787;
double r193789 = log(r193788);
return r193789;
}
double f(double x) {
double r193790 = x;
double r193791 = -1.0202654642914022;
bool r193792 = r193790 <= r193791;
double r193793 = 0.125;
double r193794 = 3.0;
double r193795 = pow(r193790, r193794);
double r193796 = r193793 / r193795;
double r193797 = 0.5;
double r193798 = r193797 / r193790;
double r193799 = 0.0625;
double r193800 = -r193799;
double r193801 = 5.0;
double r193802 = pow(r193790, r193801);
double r193803 = r193800 / r193802;
double r193804 = r193798 - r193803;
double r193805 = r193796 - r193804;
double r193806 = log(r193805);
double r193807 = 0.001008797149416407;
bool r193808 = r193790 <= r193807;
double r193809 = 1.0;
double r193810 = sqrt(r193809);
double r193811 = log(r193810);
double r193812 = r193790 / r193810;
double r193813 = r193811 + r193812;
double r193814 = 0.16666666666666666;
double r193815 = pow(r193810, r193794);
double r193816 = r193795 / r193815;
double r193817 = r193814 * r193816;
double r193818 = r193813 - r193817;
double r193819 = 1.0;
double r193820 = sqrt(r193819);
double r193821 = hypot(r193790, r193810);
double r193822 = r193820 * r193821;
double r193823 = r193790 + r193822;
double r193824 = log(r193823);
double r193825 = r193808 ? r193818 : r193824;
double r193826 = r193792 ? r193806 : r193825;
return r193826;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.4 |
| Herbie | 0.1 |
if x < -1.0202654642914022Initial program 62.7
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0202654642914022 < x < 0.001008797149416407Initial program 59.1
Taylor expanded around 0 0.1
if 0.001008797149416407 < x Initial program 31.7
rmApplied *-un-lft-identity31.7
Applied sqrt-prod31.7
Simplified0.1
Final simplification0.1
herbie shell --seed 2020035 +o rules:numerics
(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)))))