\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0079740505275243:\\
\;\;\;\;\log \left(\sqrt{\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}}\right) + \log \left(\sqrt{\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}}\right)\\
\mathbf{elif}\;x \le 0.89474849272833001:\\
\;\;\;\;\mathsf{fma}\left(\frac{-1}{6}, \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\mathsf{fma}\left(x, 2, \frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r217360 = x;
double r217361 = r217360 * r217360;
double r217362 = 1.0;
double r217363 = r217361 + r217362;
double r217364 = sqrt(r217363);
double r217365 = r217360 + r217364;
double r217366 = log(r217365);
return r217366;
}
double f(double x) {
double r217367 = x;
double r217368 = -1.0079740505275243;
bool r217369 = r217367 <= r217368;
double r217370 = 0.125;
double r217371 = 3.0;
double r217372 = pow(r217367, r217371);
double r217373 = r217370 / r217372;
double r217374 = 0.5;
double r217375 = r217374 / r217367;
double r217376 = r217373 - r217375;
double r217377 = 0.0625;
double r217378 = 5.0;
double r217379 = pow(r217367, r217378);
double r217380 = r217377 / r217379;
double r217381 = r217376 - r217380;
double r217382 = sqrt(r217381);
double r217383 = log(r217382);
double r217384 = r217383 + r217383;
double r217385 = 0.89474849272833;
bool r217386 = r217367 <= r217385;
double r217387 = -0.16666666666666666;
double r217388 = 1.0;
double r217389 = sqrt(r217388);
double r217390 = pow(r217389, r217371);
double r217391 = r217372 / r217390;
double r217392 = log(r217389);
double r217393 = r217367 / r217389;
double r217394 = r217392 + r217393;
double r217395 = fma(r217387, r217391, r217394);
double r217396 = 2.0;
double r217397 = r217375 - r217373;
double r217398 = fma(r217367, r217396, r217397);
double r217399 = log(r217398);
double r217400 = r217386 ? r217395 : r217399;
double r217401 = r217369 ? r217384 : r217400;
return r217401;
}




Bits error versus x
| Original | 52.8 |
|---|---|
| Target | 44.6 |
| Herbie | 0.3 |
if x < -1.0079740505275243Initial program 62.8
Simplified62.8
Taylor expanded around -inf 0.2
Simplified0.2
rmApplied add-sqr-sqrt0.2
Applied log-prod0.2
if -1.0079740505275243 < x < 0.89474849272833Initial program 58.5
Simplified58.5
Taylor expanded around 0 0.3
Simplified0.3
if 0.89474849272833 < x Initial program 31.1
Simplified31.1
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020045 +o rules:numerics
(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)))))