\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.021540982075884063107196197961457073689:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.0625}{{x}^{5}} + \frac{0.5}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.8817659968088067401481566776055842638016:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{\frac{1}{6}}{1} \cdot \frac{{x}^{3}}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right) + x\right)\\
\end{array}double f(double x) {
double r143480 = x;
double r143481 = r143480 * r143480;
double r143482 = 1.0;
double r143483 = r143481 + r143482;
double r143484 = sqrt(r143483);
double r143485 = r143480 + r143484;
double r143486 = log(r143485);
return r143486;
}
double f(double x) {
double r143487 = x;
double r143488 = -1.021540982075884;
bool r143489 = r143487 <= r143488;
double r143490 = 0.125;
double r143491 = 3.0;
double r143492 = pow(r143487, r143491);
double r143493 = r143490 / r143492;
double r143494 = 0.0625;
double r143495 = 5.0;
double r143496 = pow(r143487, r143495);
double r143497 = r143494 / r143496;
double r143498 = 0.5;
double r143499 = r143498 / r143487;
double r143500 = r143497 + r143499;
double r143501 = r143493 - r143500;
double r143502 = log(r143501);
double r143503 = 0.8817659968088067;
bool r143504 = r143487 <= r143503;
double r143505 = 1.0;
double r143506 = sqrt(r143505);
double r143507 = log(r143506);
double r143508 = r143487 / r143506;
double r143509 = r143507 + r143508;
double r143510 = 0.16666666666666666;
double r143511 = r143510 / r143505;
double r143512 = r143492 / r143506;
double r143513 = r143511 * r143512;
double r143514 = r143509 - r143513;
double r143515 = r143487 + r143499;
double r143516 = r143515 - r143493;
double r143517 = r143516 + r143487;
double r143518 = log(r143517);
double r143519 = r143504 ? r143514 : r143518;
double r143520 = r143489 ? r143502 : r143519;
return r143520;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 45.0 |
| Herbie | 0.3 |
if x < -1.021540982075884Initial program 63.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.021540982075884 < x < 0.8817659968088067Initial program 58.6
Taylor expanded around 0 0.3
Simplified0.3
if 0.8817659968088067 < x Initial program 31.4
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.3
herbie shell --seed 2019179
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0.0) (log (/ -1.0 (- x (sqrt (+ (* x x) 1.0))))) (log (+ x (sqrt (+ (* x x) 1.0)))))
(log (+ x (sqrt (+ (* x x) 1.0)))))