\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.03908666992687837:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} + \frac{0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 8.62376812508959946 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}, \frac{-1}{6}, \log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \mathsf{hypot}\left(x, \sqrt{1}\right)\right)\\
\end{array}double f(double x) {
double r123550 = x;
double r123551 = r123550 * r123550;
double r123552 = 1.0;
double r123553 = r123551 + r123552;
double r123554 = sqrt(r123553);
double r123555 = r123550 + r123554;
double r123556 = log(r123555);
return r123556;
}
double f(double x) {
double r123557 = x;
double r123558 = -1.0390866699268784;
bool r123559 = r123557 <= r123558;
double r123560 = 0.125;
double r123561 = 3.0;
double r123562 = pow(r123557, r123561);
double r123563 = r123560 / r123562;
double r123564 = 0.5;
double r123565 = r123564 / r123557;
double r123566 = 0.0625;
double r123567 = 5.0;
double r123568 = pow(r123557, r123567);
double r123569 = r123566 / r123568;
double r123570 = r123565 + r123569;
double r123571 = r123563 - r123570;
double r123572 = log(r123571);
double r123573 = 0.0008623768125089599;
bool r123574 = r123557 <= r123573;
double r123575 = 1.0;
double r123576 = sqrt(r123575);
double r123577 = pow(r123576, r123561);
double r123578 = r123562 / r123577;
double r123579 = -0.16666666666666666;
double r123580 = log(r123576);
double r123581 = r123557 / r123576;
double r123582 = r123580 + r123581;
double r123583 = fma(r123578, r123579, r123582);
double r123584 = hypot(r123557, r123576);
double r123585 = r123557 + r123584;
double r123586 = log(r123585);
double r123587 = r123574 ? r123583 : r123586;
double r123588 = r123559 ? r123572 : r123587;
return r123588;
}




Bits error versus x
| Original | 53.0 |
|---|---|
| Target | 45.5 |
| Herbie | 0.1 |
if x < -1.0390866699268784Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0390866699268784 < x < 0.0008623768125089599Initial program 59.2
Taylor expanded around 0 0.1
Simplified0.1
if 0.0008623768125089599 < x Initial program 31.7
rmApplied add-sqr-sqrt31.7
Applied hypot-def0.1
Final simplification0.1
herbie shell --seed 2019199 +o rules:numerics
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0.0) (log (/ -1.0 (- x (sqrt (+ (* x x) 1.0))))) (log (+ x (sqrt (+ (* x x) 1.0)))))
(log (+ x (sqrt (+ (* x x) 1.0)))))