\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0695644432902263:\\
\;\;\;\;\log \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(\frac{\frac{1}{2}}{x} + \frac{\frac{1}{16}}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.008503660101190065:\\
\;\;\;\;(\left(x \cdot \frac{-1}{6}\right) \cdot \left(x \cdot x\right) + \left((\frac{3}{40} \cdot \left({x}^{5}\right) + x)_*\right))_*\\
\mathbf{else}:\\
\;\;\;\;\log \left(\sqrt{1^2 + x^2}^* + x\right)\\
\end{array}double f(double x) {
double r42964536 = x;
double r42964537 = r42964536 * r42964536;
double r42964538 = 1.0;
double r42964539 = r42964537 + r42964538;
double r42964540 = sqrt(r42964539);
double r42964541 = r42964536 + r42964540;
double r42964542 = log(r42964541);
return r42964542;
}
double f(double x) {
double r42964543 = x;
double r42964544 = -1.0695644432902263;
bool r42964545 = r42964543 <= r42964544;
double r42964546 = 0.125;
double r42964547 = r42964546 / r42964543;
double r42964548 = r42964543 * r42964543;
double r42964549 = r42964547 / r42964548;
double r42964550 = 0.5;
double r42964551 = r42964550 / r42964543;
double r42964552 = 0.0625;
double r42964553 = 5.0;
double r42964554 = pow(r42964543, r42964553);
double r42964555 = r42964552 / r42964554;
double r42964556 = r42964551 + r42964555;
double r42964557 = r42964549 - r42964556;
double r42964558 = log(r42964557);
double r42964559 = 0.008503660101190065;
bool r42964560 = r42964543 <= r42964559;
double r42964561 = -0.16666666666666666;
double r42964562 = r42964543 * r42964561;
double r42964563 = 0.075;
double r42964564 = fma(r42964563, r42964554, r42964543);
double r42964565 = fma(r42964562, r42964548, r42964564);
double r42964566 = 1.0;
double r42964567 = hypot(r42964566, r42964543);
double r42964568 = r42964567 + r42964543;
double r42964569 = log(r42964568);
double r42964570 = r42964560 ? r42964565 : r42964569;
double r42964571 = r42964545 ? r42964558 : r42964570;
return r42964571;
}




Bits error versus x
| Original | 52.8 |
|---|---|
| Target | 45.1 |
| Herbie | 0.1 |
if x < -1.0695644432902263Initial program 61.9
Simplified61.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0695644432902263 < x < 0.008503660101190065Initial program 59.0
Simplified59.0
Taylor expanded around 0 0.1
Simplified0.1
if 0.008503660101190065 < x Initial program 31.8
Simplified0.1
Final simplification0.1
herbie shell --seed 2019119 +o rules:numerics
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))
(log (+ x (sqrt (+ (* x x) 1)))))