\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.01182013745483679:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.886359617612229145:\\
\;\;\;\;\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(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r153332 = x;
double r153333 = r153332 * r153332;
double r153334 = 1.0;
double r153335 = r153333 + r153334;
double r153336 = sqrt(r153335);
double r153337 = r153332 + r153336;
double r153338 = log(r153337);
return r153338;
}
double f(double x) {
double r153339 = x;
double r153340 = -1.0118201374548368;
bool r153341 = r153339 <= r153340;
double r153342 = 0.125;
double r153343 = 3.0;
double r153344 = pow(r153339, r153343);
double r153345 = r153342 / r153344;
double r153346 = 0.5;
double r153347 = r153346 / r153339;
double r153348 = 0.0625;
double r153349 = -r153348;
double r153350 = 5.0;
double r153351 = pow(r153339, r153350);
double r153352 = r153349 / r153351;
double r153353 = r153347 - r153352;
double r153354 = r153345 - r153353;
double r153355 = log(r153354);
double r153356 = 0.8863596176122291;
bool r153357 = r153339 <= r153356;
double r153358 = 1.0;
double r153359 = sqrt(r153358);
double r153360 = log(r153359);
double r153361 = r153339 / r153359;
double r153362 = r153360 + r153361;
double r153363 = 0.16666666666666666;
double r153364 = pow(r153359, r153343);
double r153365 = r153344 / r153364;
double r153366 = r153363 * r153365;
double r153367 = r153362 - r153366;
double r153368 = r153339 + r153347;
double r153369 = r153368 - r153345;
double r153370 = r153339 + r153369;
double r153371 = log(r153370);
double r153372 = r153357 ? r153367 : r153371;
double r153373 = r153341 ? r153355 : r153372;
return r153373;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.0118201374548368Initial program 63.0
Taylor expanded around -inf 0.3
Simplified0.3
if -1.0118201374548368 < x < 0.8863596176122291Initial program 58.5
Taylor expanded around 0 0.3
if 0.8863596176122291 < x Initial program 32.1
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020036
(FPCore (x)
:name "Hyperbolic arcsine"
:precision binary64
:herbie-target
(if (< x 0.0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))
(log (+ x (sqrt (+ (* x x) 1)))))