\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.02484362312584243:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \mathsf{fma}\left(\sqrt[3]{\frac{0.5}{x}} \cdot \sqrt[3]{\frac{0.5}{x}}, \sqrt[3]{\frac{0.5}{x}}, -\sqrt[3]{\frac{-0.0625}{{x}^{5}}} \cdot \left(\sqrt[3]{\frac{-0.0625}{{x}^{5}}} \cdot \sqrt[3]{\frac{-0.0625}{{x}^{5}}}\right)\right)\right) - \mathsf{fma}\left(-\sqrt[3]{\frac{-0.0625}{{x}^{5}}}, \sqrt[3]{\frac{-0.0625}{{x}^{5}}} \cdot \sqrt[3]{\frac{-0.0625}{{x}^{5}}}, \sqrt[3]{\frac{-0.0625}{{x}^{5}}} \cdot \left(\sqrt[3]{\frac{-0.0625}{{x}^{5}}} \cdot \sqrt[3]{\frac{-0.0625}{{x}^{5}}}\right)\right)\right)\\
\mathbf{elif}\;x \le 9.28347963773585075 \cdot 10^{-4}:\\
\;\;\;\;\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 + \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\
\end{array}double f(double x) {
double r201891 = x;
double r201892 = r201891 * r201891;
double r201893 = 1.0;
double r201894 = r201892 + r201893;
double r201895 = sqrt(r201894);
double r201896 = r201891 + r201895;
double r201897 = log(r201896);
return r201897;
}
double f(double x) {
double r201898 = x;
double r201899 = -1.0248436231258424;
bool r201900 = r201898 <= r201899;
double r201901 = 0.125;
double r201902 = 3.0;
double r201903 = pow(r201898, r201902);
double r201904 = r201901 / r201903;
double r201905 = 0.5;
double r201906 = r201905 / r201898;
double r201907 = cbrt(r201906);
double r201908 = r201907 * r201907;
double r201909 = 0.0625;
double r201910 = -r201909;
double r201911 = 5.0;
double r201912 = pow(r201898, r201911);
double r201913 = r201910 / r201912;
double r201914 = cbrt(r201913);
double r201915 = r201914 * r201914;
double r201916 = r201914 * r201915;
double r201917 = -r201916;
double r201918 = fma(r201908, r201907, r201917);
double r201919 = r201904 - r201918;
double r201920 = -r201914;
double r201921 = fma(r201920, r201915, r201916);
double r201922 = r201919 - r201921;
double r201923 = log(r201922);
double r201924 = 0.0009283479637735851;
bool r201925 = r201898 <= r201924;
double r201926 = 1.0;
double r201927 = sqrt(r201926);
double r201928 = log(r201927);
double r201929 = r201898 / r201927;
double r201930 = r201928 + r201929;
double r201931 = 0.16666666666666666;
double r201932 = pow(r201927, r201902);
double r201933 = r201903 / r201932;
double r201934 = r201931 * r201933;
double r201935 = r201930 - r201934;
double r201936 = hypot(r201898, r201927);
double r201937 = r201898 + r201936;
double r201938 = log(r201937);
double r201939 = r201925 ? r201935 : r201938;
double r201940 = r201900 ? r201923 : r201939;
return r201940;
}




Bits error versus x
| Original | 53.1 |
|---|---|
| Target | 45.1 |
| Herbie | 0.2 |
if x < -1.0248436231258424Initial program 63.0
Taylor expanded around -inf 0.2
Simplified0.2
rmApplied add-cube-cbrt0.2
Applied add-cube-cbrt0.2
Applied prod-diff0.2
Applied associate--r+0.2
if -1.0248436231258424 < x < 0.0009283479637735851Initial program 58.8
Taylor expanded around 0 0.2
if 0.0009283479637735851 < x Initial program 31.7
rmApplied add-sqr-sqrt31.7
Applied hypot-def0.1
Final simplification0.2
herbie shell --seed 2020027 +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)))))