\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.03811431304857993:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.90048843936555456:\\
\;\;\;\;\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 r157400 = x;
double r157401 = r157400 * r157400;
double r157402 = 1.0;
double r157403 = r157401 + r157402;
double r157404 = sqrt(r157403);
double r157405 = r157400 + r157404;
double r157406 = log(r157405);
return r157406;
}
double f(double x) {
double r157407 = x;
double r157408 = -1.03811431304858;
bool r157409 = r157407 <= r157408;
double r157410 = 0.125;
double r157411 = 3.0;
double r157412 = pow(r157407, r157411);
double r157413 = r157410 / r157412;
double r157414 = 0.5;
double r157415 = r157414 / r157407;
double r157416 = 0.0625;
double r157417 = -r157416;
double r157418 = 5.0;
double r157419 = pow(r157407, r157418);
double r157420 = r157417 / r157419;
double r157421 = r157415 - r157420;
double r157422 = r157413 - r157421;
double r157423 = log(r157422);
double r157424 = 0.9004884393655546;
bool r157425 = r157407 <= r157424;
double r157426 = 1.0;
double r157427 = sqrt(r157426);
double r157428 = log(r157427);
double r157429 = r157407 / r157427;
double r157430 = r157428 + r157429;
double r157431 = 0.16666666666666666;
double r157432 = pow(r157427, r157411);
double r157433 = r157412 / r157432;
double r157434 = r157431 * r157433;
double r157435 = r157430 - r157434;
double r157436 = r157407 + r157415;
double r157437 = r157436 - r157413;
double r157438 = r157407 + r157437;
double r157439 = log(r157438);
double r157440 = r157425 ? r157435 : r157439;
double r157441 = r157409 ? r157423 : r157440;
return r157441;
}




Bits error versus x
Results
| Original | 53.0 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.03811431304858Initial program 62.7
Taylor expanded around -inf 0.3
Simplified0.3
if -1.03811431304858 < x < 0.9004884393655546Initial program 58.8
Taylor expanded around 0 0.3
if 0.9004884393655546 < x Initial program 32.6
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.3
herbie shell --seed 2020047
(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)))))