\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0108746280769982:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 0.889403010662941917:\\
\;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \frac{-1}{6}, \log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\mathsf{fma}\left(x, 2, \frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r168948 = x;
double r168949 = r168948 * r168948;
double r168950 = 1.0;
double r168951 = r168949 + r168950;
double r168952 = sqrt(r168951);
double r168953 = r168948 + r168952;
double r168954 = log(r168953);
return r168954;
}
double f(double x) {
double r168955 = x;
double r168956 = -1.0108746280769982;
bool r168957 = r168955 <= r168956;
double r168958 = 0.125;
double r168959 = 3.0;
double r168960 = pow(r168955, r168959);
double r168961 = r168958 / r168960;
double r168962 = 0.5;
double r168963 = r168962 / r168955;
double r168964 = r168961 - r168963;
double r168965 = 0.0625;
double r168966 = 5.0;
double r168967 = pow(r168955, r168966);
double r168968 = r168965 / r168967;
double r168969 = r168964 - r168968;
double r168970 = log(r168969);
double r168971 = 0.8894030106629419;
bool r168972 = r168955 <= r168971;
double r168973 = 1.0;
double r168974 = sqrt(r168973);
double r168975 = pow(r168974, r168959);
double r168976 = r168960 / r168975;
double r168977 = -0.16666666666666666;
double r168978 = log(r168974);
double r168979 = r168955 / r168974;
double r168980 = r168978 + r168979;
double r168981 = fma(r168976, r168977, r168980);
double r168982 = 2.0;
double r168983 = r168963 - r168961;
double r168984 = fma(r168955, r168982, r168983);
double r168985 = log(r168984);
double r168986 = r168972 ? r168981 : r168985;
double r168987 = r168957 ? r168970 : r168986;
return r168987;
}




Bits error versus x
| Original | 52.7 |
|---|---|
| Target | 44.7 |
| Herbie | 0.2 |
if x < -1.0108746280769982Initial program 62.7
Simplified62.7
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0108746280769982 < x < 0.8894030106629419Initial program 58.5
Simplified58.5
Taylor expanded around 0 0.3
Simplified0.3
if 0.8894030106629419 < x Initial program 31.0
Simplified31.0
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020043 +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)))))