\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0589513033049822:\\
\;\;\;\;\log \left(\frac{\frac{-1}{16}}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)} - \left(\frac{\frac{1}{2}}{x} + \frac{\frac{-1}{8}}{\left(x \cdot x\right) \cdot x}\right)\right)\\
\mathbf{elif}\;x \le 0.9524227754971865:\\
\;\;\;\;\left(x - \left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{1}{6}\right) + \left(\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)\right) \cdot \frac{3}{40}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\left(\frac{\frac{1}{2}}{x} + \frac{\frac{-1}{8}}{\left(x \cdot x\right) \cdot x}\right) + x\right) + x\right)\\
\end{array}double f(double x) {
double r5009371 = x;
double r5009372 = r5009371 * r5009371;
double r5009373 = 1.0;
double r5009374 = r5009372 + r5009373;
double r5009375 = sqrt(r5009374);
double r5009376 = r5009371 + r5009375;
double r5009377 = log(r5009376);
return r5009377;
}
double f(double x) {
double r5009378 = x;
double r5009379 = -1.0589513033049822;
bool r5009380 = r5009378 <= r5009379;
double r5009381 = -0.0625;
double r5009382 = r5009378 * r5009378;
double r5009383 = r5009382 * r5009378;
double r5009384 = r5009382 * r5009383;
double r5009385 = r5009381 / r5009384;
double r5009386 = 0.5;
double r5009387 = r5009386 / r5009378;
double r5009388 = -0.125;
double r5009389 = r5009388 / r5009383;
double r5009390 = r5009387 + r5009389;
double r5009391 = r5009385 - r5009390;
double r5009392 = log(r5009391);
double r5009393 = 0.9524227754971865;
bool r5009394 = r5009378 <= r5009393;
double r5009395 = 0.16666666666666666;
double r5009396 = r5009383 * r5009395;
double r5009397 = r5009378 - r5009396;
double r5009398 = 0.075;
double r5009399 = r5009384 * r5009398;
double r5009400 = r5009397 + r5009399;
double r5009401 = r5009390 + r5009378;
double r5009402 = r5009401 + r5009378;
double r5009403 = log(r5009402);
double r5009404 = r5009394 ? r5009400 : r5009403;
double r5009405 = r5009380 ? r5009392 : r5009404;
return r5009405;
}




Bits error versus x
Results
| Original | 52.4 |
|---|---|
| Target | 44.7 |
| Herbie | 0.2 |
if x < -1.0589513033049822Initial program 62.1
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0589513033049822 < x < 0.9524227754971865Initial program 58.5
Taylor expanded around 0 0.2
Simplified0.2
if 0.9524227754971865 < x Initial program 31.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019133
(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)))))