\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.020534956814445282091696753923315554857:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 8.065403850916960659667154232010943815112 \cdot 10^{-4}:\\
\;\;\;\;\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(x + \sqrt{\mathsf{hypot}\left(x, \sqrt{1}\right)} \cdot \sqrt{\mathsf{hypot}\left(x, \sqrt{1}\right)}\right)\\
\end{array}double f(double x) {
double r105908 = x;
double r105909 = r105908 * r105908;
double r105910 = 1.0;
double r105911 = r105909 + r105910;
double r105912 = sqrt(r105911);
double r105913 = r105908 + r105912;
double r105914 = log(r105913);
return r105914;
}
double f(double x) {
double r105915 = x;
double r105916 = -1.0205349568144453;
bool r105917 = r105915 <= r105916;
double r105918 = 0.125;
double r105919 = 3.0;
double r105920 = pow(r105915, r105919);
double r105921 = r105918 / r105920;
double r105922 = 0.5;
double r105923 = r105922 / r105915;
double r105924 = 0.0625;
double r105925 = 5.0;
double r105926 = pow(r105915, r105925);
double r105927 = r105924 / r105926;
double r105928 = r105923 + r105927;
double r105929 = r105921 - r105928;
double r105930 = log(r105929);
double r105931 = 0.0008065403850916961;
bool r105932 = r105915 <= r105931;
double r105933 = 1.0;
double r105934 = sqrt(r105933);
double r105935 = pow(r105934, r105919);
double r105936 = r105920 / r105935;
double r105937 = -0.16666666666666666;
double r105938 = log(r105934);
double r105939 = r105915 / r105934;
double r105940 = r105938 + r105939;
double r105941 = fma(r105936, r105937, r105940);
double r105942 = hypot(r105915, r105934);
double r105943 = sqrt(r105942);
double r105944 = r105943 * r105943;
double r105945 = r105915 + r105944;
double r105946 = log(r105945);
double r105947 = r105932 ? r105941 : r105946;
double r105948 = r105917 ? r105930 : r105947;
return r105948;
}




Bits error versus x
| Original | 53.4 |
|---|---|
| Target | 45.7 |
| Herbie | 0.1 |
if x < -1.0205349568144453Initial program 63.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0205349568144453 < x < 0.0008065403850916961Initial program 58.9
Taylor expanded around 0 0.1
Simplified0.1
if 0.0008065403850916961 < x Initial program 32.2
rmApplied add-sqr-sqrt32.2
Applied hypot-def0.1
rmApplied add-sqr-sqrt0.1
Final simplification0.1
herbie shell --seed 2019208 +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)))))