\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.01388879764755901:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.888575674591003:\\
\;\;\;\;\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(\left(2 \cdot x + 0.5 \cdot \frac{1}{x}\right) - 0.125 \cdot \frac{1}{{x}^{3}}\right)\\
\end{array}double f(double x) {
double r138975 = x;
double r138976 = r138975 * r138975;
double r138977 = 1.0;
double r138978 = r138976 + r138977;
double r138979 = sqrt(r138978);
double r138980 = r138975 + r138979;
double r138981 = log(r138980);
return r138981;
}
double f(double x) {
double r138982 = x;
double r138983 = -1.013888797647559;
bool r138984 = r138982 <= r138983;
double r138985 = 0.125;
double r138986 = 3.0;
double r138987 = pow(r138982, r138986);
double r138988 = r138985 / r138987;
double r138989 = 0.5;
double r138990 = r138989 / r138982;
double r138991 = 0.0625;
double r138992 = -r138991;
double r138993 = 5.0;
double r138994 = pow(r138982, r138993);
double r138995 = r138992 / r138994;
double r138996 = r138990 - r138995;
double r138997 = r138988 - r138996;
double r138998 = log(r138997);
double r138999 = 0.888575674591003;
bool r139000 = r138982 <= r138999;
double r139001 = 1.0;
double r139002 = sqrt(r139001);
double r139003 = log(r139002);
double r139004 = r138982 / r139002;
double r139005 = r139003 + r139004;
double r139006 = 0.16666666666666666;
double r139007 = pow(r139002, r138986);
double r139008 = r138987 / r139007;
double r139009 = r139006 * r139008;
double r139010 = r139005 - r139009;
double r139011 = 2.0;
double r139012 = r139011 * r138982;
double r139013 = 1.0;
double r139014 = r139013 / r138982;
double r139015 = r138989 * r139014;
double r139016 = r139012 + r139015;
double r139017 = r139013 / r138987;
double r139018 = r138985 * r139017;
double r139019 = r139016 - r139018;
double r139020 = log(r139019);
double r139021 = r139000 ? r139010 : r139020;
double r139022 = r138984 ? r138998 : r139021;
return r139022;
}




Bits error versus x
Results
| Original | 52.9 |
|---|---|
| Target | 44.8 |
| Herbie | 0.3 |
if x < -1.013888797647559Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.013888797647559 < x < 0.888575674591003Initial program 58.5
Taylor expanded around 0 0.3
if 0.888575674591003 < x Initial program 31.3
rmApplied flip-+62.9
Simplified62.9
Taylor expanded around inf 0.2
Final simplification0.3
herbie shell --seed 2020049
(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)))))