\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(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r125972 = x;
double r125973 = r125972 * r125972;
double r125974 = 1.0;
double r125975 = r125973 + r125974;
double r125976 = sqrt(r125975);
double r125977 = r125972 + r125976;
double r125978 = log(r125977);
return r125978;
}
double f(double x) {
double r125979 = x;
double r125980 = -0.9989549344709008;
bool r125981 = r125979 <= r125980;
double r125982 = 0.125;
double r125983 = 3.0;
double r125984 = pow(r125979, r125983);
double r125985 = r125982 / r125984;
double r125986 = 0.5;
double r125987 = r125986 / r125979;
double r125988 = 0.0625;
double r125989 = 5.0;
double r125990 = pow(r125979, r125989);
double r125991 = r125988 / r125990;
double r125992 = r125987 + r125991;
double r125993 = r125985 - r125992;
double r125994 = log(r125993);
double r125995 = 0.9001758350297782;
bool r125996 = r125979 <= r125995;
double r125997 = 1.0;
double r125998 = sqrt(r125997);
double r125999 = log(r125998);
double r126000 = r125979 / r125998;
double r126001 = r125999 + r126000;
double r126002 = 0.16666666666666666;
double r126003 = pow(r125998, r125983);
double r126004 = r125984 / r126003;
double r126005 = r126002 * r126004;
double r126006 = r126001 - r126005;
double r126007 = r125979 - r125985;
double r126008 = r125987 + r126007;
double r126009 = r125979 + r126008;
double r126010 = log(r126009);
double r126011 = r125996 ? r126006 : r126010;
double r126012 = r125981 ? r125994 : r126011;
return r126012;
}




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