\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.020534956814445282091696753923315554857:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 0.8969537796209996471930026018526405096054:\\
\;\;\;\;\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(x + \left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r98568 = x;
double r98569 = r98568 * r98568;
double r98570 = 1.0;
double r98571 = r98569 + r98570;
double r98572 = sqrt(r98571);
double r98573 = r98568 + r98572;
double r98574 = log(r98573);
return r98574;
}
double f(double x) {
double r98575 = x;
double r98576 = -1.0205349568144453;
bool r98577 = r98575 <= r98576;
double r98578 = 0.125;
double r98579 = 3.0;
double r98580 = pow(r98575, r98579);
double r98581 = r98578 / r98580;
double r98582 = 0.5;
double r98583 = r98582 / r98575;
double r98584 = r98581 - r98583;
double r98585 = 0.0625;
double r98586 = 5.0;
double r98587 = pow(r98575, r98586);
double r98588 = r98585 / r98587;
double r98589 = r98584 - r98588;
double r98590 = log(r98589);
double r98591 = 0.8969537796209996;
bool r98592 = r98575 <= r98591;
double r98593 = 1.0;
double r98594 = sqrt(r98593);
double r98595 = log(r98594);
double r98596 = r98575 / r98594;
double r98597 = r98595 + r98596;
double r98598 = 0.16666666666666666;
double r98599 = pow(r98594, r98579);
double r98600 = r98580 / r98599;
double r98601 = r98598 * r98600;
double r98602 = r98597 - r98601;
double r98603 = r98583 - r98581;
double r98604 = r98575 + r98603;
double r98605 = r98575 + r98604;
double r98606 = log(r98605);
double r98607 = r98592 ? r98602 : r98606;
double r98608 = r98577 ? r98590 : r98607;
return r98608;
}




Bits error versus x
Results
| Original | 53.4 |
|---|---|
| Target | 45.7 |
| Herbie | 0.2 |
if x < -1.0205349568144453Initial program 63.1
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0205349568144453 < x < 0.8969537796209996Initial program 58.7
Taylor expanded around 0 0.2
if 0.8969537796209996 < x Initial program 32.4
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019208
(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)))))