\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.997323780249505298:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.001113141778355475:\\
\;\;\;\;\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(1 \cdot \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\right)\\
\end{array}double f(double x) {
double r132984 = x;
double r132985 = r132984 * r132984;
double r132986 = 1.0;
double r132987 = r132985 + r132986;
double r132988 = sqrt(r132987);
double r132989 = r132984 + r132988;
double r132990 = log(r132989);
return r132990;
}
double f(double x) {
double r132991 = x;
double r132992 = -0.9973237802495053;
bool r132993 = r132991 <= r132992;
double r132994 = 0.125;
double r132995 = 3.0;
double r132996 = pow(r132991, r132995);
double r132997 = r132994 / r132996;
double r132998 = 0.5;
double r132999 = r132998 / r132991;
double r133000 = 0.0625;
double r133001 = -r133000;
double r133002 = 5.0;
double r133003 = pow(r132991, r133002);
double r133004 = r133001 / r133003;
double r133005 = r132999 - r133004;
double r133006 = r132997 - r133005;
double r133007 = log(r133006);
double r133008 = 0.0011131417783554753;
bool r133009 = r132991 <= r133008;
double r133010 = 1.0;
double r133011 = sqrt(r133010);
double r133012 = log(r133011);
double r133013 = r132991 / r133011;
double r133014 = r133012 + r133013;
double r133015 = 0.16666666666666666;
double r133016 = pow(r133011, r132995);
double r133017 = r132996 / r133016;
double r133018 = r133015 * r133017;
double r133019 = r133014 - r133018;
double r133020 = 1.0;
double r133021 = hypot(r132991, r133011);
double r133022 = r133021 + r132991;
double r133023 = r133020 * r133022;
double r133024 = log(r133023);
double r133025 = r133009 ? r133019 : r133024;
double r133026 = r132993 ? r133007 : r133025;
return r133026;
}




Bits error versus x
Results
| Original | 52.9 |
|---|---|
| Target | 45.3 |
| Herbie | 0.1 |
if x < -0.9973237802495053Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
if -0.9973237802495053 < x < 0.0011131417783554753Initial program 58.8
Taylor expanded around 0 0.2
if 0.0011131417783554753 < x Initial program 30.9
rmApplied *-un-lft-identity30.9
Applied *-un-lft-identity30.9
Applied distribute-lft-out30.9
Simplified0.1
Final simplification0.1
herbie shell --seed 2020056 +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)))))