\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.010680203662621456928150109888520091772:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.892107185291025173157208882912527769804:\\
\;\;\;\;\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(\frac{0.5}{x} - \left(\frac{0.125}{{x}^{3}} - 2 \cdot x\right)\right)\\
\end{array}double f(double x) {
double r167332 = x;
double r167333 = r167332 * r167332;
double r167334 = 1.0;
double r167335 = r167333 + r167334;
double r167336 = sqrt(r167335);
double r167337 = r167332 + r167336;
double r167338 = log(r167337);
return r167338;
}
double f(double x) {
double r167339 = x;
double r167340 = -1.0106802036626215;
bool r167341 = r167339 <= r167340;
double r167342 = 0.125;
double r167343 = 3.0;
double r167344 = pow(r167339, r167343);
double r167345 = r167342 / r167344;
double r167346 = 0.5;
double r167347 = r167346 / r167339;
double r167348 = 0.0625;
double r167349 = -r167348;
double r167350 = 5.0;
double r167351 = pow(r167339, r167350);
double r167352 = r167349 / r167351;
double r167353 = r167347 - r167352;
double r167354 = r167345 - r167353;
double r167355 = log(r167354);
double r167356 = 0.8921071852910252;
bool r167357 = r167339 <= r167356;
double r167358 = 1.0;
double r167359 = sqrt(r167358);
double r167360 = log(r167359);
double r167361 = r167339 / r167359;
double r167362 = r167360 + r167361;
double r167363 = 0.16666666666666666;
double r167364 = pow(r167359, r167343);
double r167365 = r167344 / r167364;
double r167366 = r167363 * r167365;
double r167367 = r167362 - r167366;
double r167368 = 2.0;
double r167369 = r167368 * r167339;
double r167370 = r167345 - r167369;
double r167371 = r167347 - r167370;
double r167372 = log(r167371);
double r167373 = r167357 ? r167367 : r167372;
double r167374 = r167341 ? r167355 : r167373;
return r167374;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.0106802036626215Initial program 62.9
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0106802036626215 < x < 0.8921071852910252Initial program 58.8
Taylor expanded around 0 0.3
if 0.8921071852910252 < x Initial program 32.2
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020001
(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)))))