\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.004655468536683526892261397733818739653:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.8822245400237949120025859883753582835197:\\
\;\;\;\;\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(\frac{0.5}{x} - \left(\frac{0.125}{{x}^{3}} - 2 \cdot x\right)\right)\\
\end{array}double f(double x) {
double r140046 = x;
double r140047 = r140046 * r140046;
double r140048 = 1.0;
double r140049 = r140047 + r140048;
double r140050 = sqrt(r140049);
double r140051 = r140046 + r140050;
double r140052 = log(r140051);
return r140052;
}
double f(double x) {
double r140053 = x;
double r140054 = -1.0046554685366835;
bool r140055 = r140053 <= r140054;
double r140056 = 0.125;
double r140057 = 3.0;
double r140058 = pow(r140053, r140057);
double r140059 = r140056 / r140058;
double r140060 = 0.5;
double r140061 = r140060 / r140053;
double r140062 = 0.0625;
double r140063 = -r140062;
double r140064 = 5.0;
double r140065 = pow(r140053, r140064);
double r140066 = r140063 / r140065;
double r140067 = r140061 - r140066;
double r140068 = r140059 - r140067;
double r140069 = log(r140068);
double r140070 = 0.8822245400237949;
bool r140071 = r140053 <= r140070;
double r140072 = 1.0;
double r140073 = sqrt(r140072);
double r140074 = log(r140073);
double r140075 = r140053 / r140073;
double r140076 = r140074 + r140075;
double r140077 = 0.16666666666666666;
double r140078 = pow(r140073, r140057);
double r140079 = r140058 / r140078;
double r140080 = r140077 * r140079;
double r140081 = r140076 - r140080;
double r140082 = 2.0;
double r140083 = r140082 * r140053;
double r140084 = r140059 - r140083;
double r140085 = r140061 - r140084;
double r140086 = log(r140085);
double r140087 = r140071 ? r140081 : r140086;
double r140088 = r140055 ? r140069 : r140087;
return r140088;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.3 |
| Herbie | 0.3 |
if x < -1.0046554685366835Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0046554685366835 < x < 0.8822245400237949Initial program 58.7
Taylor expanded around 0 0.3
if 0.8822245400237949 < x Initial program 32.8
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020002
(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)))))