\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0108746280769982:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.889403010662941917:\\
\;\;\;\;\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(\left(2 \cdot x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\\
\end{array}double f(double x) {
double r146489 = x;
double r146490 = r146489 * r146489;
double r146491 = 1.0;
double r146492 = r146490 + r146491;
double r146493 = sqrt(r146492);
double r146494 = r146489 + r146493;
double r146495 = log(r146494);
return r146495;
}
double f(double x) {
double r146496 = x;
double r146497 = -1.0108746280769982;
bool r146498 = r146496 <= r146497;
double r146499 = 0.125;
double r146500 = 3.0;
double r146501 = pow(r146496, r146500);
double r146502 = r146499 / r146501;
double r146503 = 0.5;
double r146504 = r146503 / r146496;
double r146505 = 0.0625;
double r146506 = 5.0;
double r146507 = pow(r146496, r146506);
double r146508 = r146505 / r146507;
double r146509 = r146504 + r146508;
double r146510 = r146502 - r146509;
double r146511 = log(r146510);
double r146512 = 0.8894030106629419;
bool r146513 = r146496 <= r146512;
double r146514 = 1.0;
double r146515 = sqrt(r146514);
double r146516 = log(r146515);
double r146517 = r146496 / r146515;
double r146518 = r146516 + r146517;
double r146519 = 0.16666666666666666;
double r146520 = pow(r146515, r146500);
double r146521 = r146501 / r146520;
double r146522 = r146519 * r146521;
double r146523 = r146518 - r146522;
double r146524 = 2.0;
double r146525 = r146524 * r146496;
double r146526 = r146525 + r146504;
double r146527 = r146526 - r146502;
double r146528 = log(r146527);
double r146529 = r146513 ? r146523 : r146528;
double r146530 = r146498 ? r146511 : r146529;
return r146530;
}




Bits error versus x
Results
| Original | 52.7 |
|---|---|
| Target | 44.7 |
| Herbie | 0.2 |
if x < -1.0108746280769982Initial program 62.7
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0108746280769982 < x < 0.8894030106629419Initial program 58.5
Taylor expanded around 0 0.3
if 0.8894030106629419 < x Initial program 31.0
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2020043
(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)))))