\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.004281043358186797931352884916123002768:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8904752561288424850260980747407302260399:\\
\;\;\;\;\frac{x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}}{\sqrt{1}} + \log \left(\sqrt{1}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\frac{0.5}{x} - \frac{0.125}{{x}^{3}}\right) + 2 \cdot x\right)\\
\end{array}double f(double x) {
double r131117 = x;
double r131118 = r131117 * r131117;
double r131119 = 1.0;
double r131120 = r131118 + r131119;
double r131121 = sqrt(r131120);
double r131122 = r131117 + r131121;
double r131123 = log(r131122);
return r131123;
}
double f(double x) {
double r131124 = x;
double r131125 = -1.0042810433581868;
bool r131126 = r131124 <= r131125;
double r131127 = 0.125;
double r131128 = 3.0;
double r131129 = pow(r131124, r131128);
double r131130 = r131127 / r131129;
double r131131 = 0.0625;
double r131132 = 5.0;
double r131133 = pow(r131124, r131132);
double r131134 = r131131 / r131133;
double r131135 = r131130 - r131134;
double r131136 = 0.5;
double r131137 = r131136 / r131124;
double r131138 = r131135 - r131137;
double r131139 = log(r131138);
double r131140 = 0.8904752561288425;
bool r131141 = r131124 <= r131140;
double r131142 = 1.0;
double r131143 = -0.16666666666666666;
double r131144 = r131142 / r131143;
double r131145 = r131129 / r131144;
double r131146 = r131124 + r131145;
double r131147 = sqrt(r131142);
double r131148 = r131146 / r131147;
double r131149 = log(r131147);
double r131150 = r131148 + r131149;
double r131151 = r131137 - r131130;
double r131152 = 2.0;
double r131153 = r131152 * r131124;
double r131154 = r131151 + r131153;
double r131155 = log(r131154);
double r131156 = r131141 ? r131150 : r131155;
double r131157 = r131126 ? r131139 : r131156;
return r131157;
}




Bits error versus x
Results
| Original | 53.1 |
|---|---|
| Target | 45.4 |
| Herbie | 0.3 |
if x < -1.0042810433581868Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0042810433581868 < x < 0.8904752561288425Initial program 58.6
Taylor expanded around 0 0.3
Simplified0.3
rmApplied pow10.3
Applied pow10.3
Applied pow-prod-down0.3
Simplified0.3
if 0.8904752561288425 < x Initial program 32.2
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.3
herbie shell --seed 2019326
(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)))))