\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.076228701950242:\\
\;\;\;\;\log \left(\frac{\frac{-1}{16}}{{x}^{5}} + \left(\frac{\frac{1}{8}}{x \cdot \left(x \cdot x\right)} + \frac{\frac{-1}{2}}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.9496967329184121:\\
\;\;\;\;\left(x + \left(x \cdot \left(x \cdot x\right)\right) \cdot \frac{-1}{6}\right) + {x}^{5} \cdot \frac{3}{40}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(x + \left(\frac{\frac{1}{2}}{x} - \frac{\frac{1}{8}}{x \cdot \left(x \cdot x\right)}\right)\right) + x\right)\\
\end{array}double f(double x) {
double r1648407 = x;
double r1648408 = r1648407 * r1648407;
double r1648409 = 1.0;
double r1648410 = r1648408 + r1648409;
double r1648411 = sqrt(r1648410);
double r1648412 = r1648407 + r1648411;
double r1648413 = log(r1648412);
return r1648413;
}
double f(double x) {
double r1648414 = x;
double r1648415 = -1.076228701950242;
bool r1648416 = r1648414 <= r1648415;
double r1648417 = -0.0625;
double r1648418 = 5.0;
double r1648419 = pow(r1648414, r1648418);
double r1648420 = r1648417 / r1648419;
double r1648421 = 0.125;
double r1648422 = r1648414 * r1648414;
double r1648423 = r1648414 * r1648422;
double r1648424 = r1648421 / r1648423;
double r1648425 = -0.5;
double r1648426 = r1648425 / r1648414;
double r1648427 = r1648424 + r1648426;
double r1648428 = r1648420 + r1648427;
double r1648429 = log(r1648428);
double r1648430 = 0.9496967329184121;
bool r1648431 = r1648414 <= r1648430;
double r1648432 = -0.16666666666666666;
double r1648433 = r1648423 * r1648432;
double r1648434 = r1648414 + r1648433;
double r1648435 = 0.075;
double r1648436 = r1648419 * r1648435;
double r1648437 = r1648434 + r1648436;
double r1648438 = 0.5;
double r1648439 = r1648438 / r1648414;
double r1648440 = r1648439 - r1648424;
double r1648441 = r1648414 + r1648440;
double r1648442 = r1648441 + r1648414;
double r1648443 = log(r1648442);
double r1648444 = r1648431 ? r1648437 : r1648443;
double r1648445 = r1648416 ? r1648429 : r1648444;
return r1648445;
}




Bits error versus x
Results
| Original | 52.6 |
|---|---|
| Target | 44.6 |
| Herbie | 0.2 |
if x < -1.076228701950242Initial program 61.8
Taylor expanded around -inf 0.1
Simplified0.1
if -1.076228701950242 < x < 0.9496967329184121Initial program 58.5
Taylor expanded around 0 0.2
Simplified0.2
if 0.9496967329184121 < x Initial program 31.2
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019153
(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)))))