\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.03908666992687837:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 0.89600402982816929:\\
\;\;\;\;\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(x + \left(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r113368 = x;
double r113369 = r113368 * r113368;
double r113370 = 1.0;
double r113371 = r113369 + r113370;
double r113372 = sqrt(r113371);
double r113373 = r113368 + r113372;
double r113374 = log(r113373);
return r113374;
}
double f(double x) {
double r113375 = x;
double r113376 = -1.0390866699268784;
bool r113377 = r113375 <= r113376;
double r113378 = 0.125;
double r113379 = 3.0;
double r113380 = pow(r113375, r113379);
double r113381 = r113378 / r113380;
double r113382 = 0.5;
double r113383 = r113382 / r113375;
double r113384 = r113381 - r113383;
double r113385 = 0.0625;
double r113386 = 5.0;
double r113387 = pow(r113375, r113386);
double r113388 = r113385 / r113387;
double r113389 = r113384 - r113388;
double r113390 = log(r113389);
double r113391 = 0.8960040298281693;
bool r113392 = r113375 <= r113391;
double r113393 = 1.0;
double r113394 = sqrt(r113393);
double r113395 = log(r113394);
double r113396 = r113375 / r113394;
double r113397 = r113395 + r113396;
double r113398 = 0.16666666666666666;
double r113399 = pow(r113394, r113379);
double r113400 = r113380 / r113399;
double r113401 = r113398 * r113400;
double r113402 = r113397 - r113401;
double r113403 = r113383 - r113381;
double r113404 = r113375 + r113403;
double r113405 = r113375 + r113404;
double r113406 = log(r113405);
double r113407 = r113392 ? r113402 : r113406;
double r113408 = r113377 ? r113390 : r113407;
return r113408;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 45.5 |
| Herbie | 0.2 |
if x < -1.0390866699268784Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0390866699268784 < x < 0.8960040298281693Initial program 59.0
Taylor expanded around 0 0.2
if 0.8960040298281693 < x Initial program 31.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019199
(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)))))