\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0176898016477431:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 8.7245542497505564 \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 r166971 = x;
double r166972 = r166971 * r166971;
double r166973 = 1.0;
double r166974 = r166972 + r166973;
double r166975 = sqrt(r166974);
double r166976 = r166971 + r166975;
double r166977 = log(r166976);
return r166977;
}
double f(double x) {
double r166978 = x;
double r166979 = -1.0176898016477431;
bool r166980 = r166978 <= r166979;
double r166981 = 0.125;
double r166982 = 3.0;
double r166983 = pow(r166978, r166982);
double r166984 = r166981 / r166983;
double r166985 = 0.5;
double r166986 = r166985 / r166978;
double r166987 = 0.0625;
double r166988 = -r166987;
double r166989 = 5.0;
double r166990 = pow(r166978, r166989);
double r166991 = r166988 / r166990;
double r166992 = r166986 - r166991;
double r166993 = r166984 - r166992;
double r166994 = log(r166993);
double r166995 = 0.0008724554249750556;
bool r166996 = r166978 <= r166995;
double r166997 = 1.0;
double r166998 = sqrt(r166997);
double r166999 = log(r166998);
double r167000 = r166978 / r166998;
double r167001 = r166999 + r167000;
double r167002 = 0.16666666666666666;
double r167003 = pow(r166998, r166982);
double r167004 = r166983 / r167003;
double r167005 = r167002 * r167004;
double r167006 = r167001 - r167005;
double r167007 = hypot(r166978, r166998);
double r167008 = r166978 + r167007;
double r167009 = log(r167008);
double r167010 = r166996 ? r167006 : r167009;
double r167011 = r166980 ? r166994 : r167010;
return r167011;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.7 |
| Herbie | 0.2 |
if x < -1.0176898016477431Initial program 62.5
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0176898016477431 < x < 0.0008724554249750556Initial program 59.1
Taylor expanded around 0 0.1
if 0.0008724554249750556 < x Initial program 32.4
rmApplied add-sqr-sqrt32.4
Applied hypot-def0.2
Final simplification0.2
herbie shell --seed 2020039 +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)))))