\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.021894228612228561203778554045129567385:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.5}{x}\right) - \frac{0.0625}{{x}^{5}}\right)\\
\mathbf{elif}\;x \le 9.62392103013770539021720651362556964159 \cdot 10^{-4}:\\
\;\;\;\;\mathsf{fma}\left(\frac{{x}^{3}}{1 \cdot \sqrt{1}}, \frac{-1}{6}, \log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\mathsf{hypot}\left(x, \sqrt{1}\right) + x\right)\\
\end{array}double f(double x) {
double r166224 = x;
double r166225 = r166224 * r166224;
double r166226 = 1.0;
double r166227 = r166225 + r166226;
double r166228 = sqrt(r166227);
double r166229 = r166224 + r166228;
double r166230 = log(r166229);
return r166230;
}
double f(double x) {
double r166231 = x;
double r166232 = -1.0218942286122286;
bool r166233 = r166231 <= r166232;
double r166234 = 0.125;
double r166235 = 3.0;
double r166236 = pow(r166231, r166235);
double r166237 = r166234 / r166236;
double r166238 = 0.5;
double r166239 = r166238 / r166231;
double r166240 = r166237 - r166239;
double r166241 = 0.0625;
double r166242 = 5.0;
double r166243 = pow(r166231, r166242);
double r166244 = r166241 / r166243;
double r166245 = r166240 - r166244;
double r166246 = log(r166245);
double r166247 = 0.0009623921030137705;
bool r166248 = r166231 <= r166247;
double r166249 = 1.0;
double r166250 = sqrt(r166249);
double r166251 = r166249 * r166250;
double r166252 = r166236 / r166251;
double r166253 = -0.16666666666666666;
double r166254 = log(r166250);
double r166255 = r166231 / r166250;
double r166256 = r166254 + r166255;
double r166257 = fma(r166252, r166253, r166256);
double r166258 = hypot(r166231, r166250);
double r166259 = r166258 + r166231;
double r166260 = log(r166259);
double r166261 = r166248 ? r166257 : r166260;
double r166262 = r166233 ? r166246 : r166261;
return r166262;
}




Bits error versus x
| Original | 53.1 |
|---|---|
| Target | 45.4 |
| Herbie | 0.1 |
if x < -1.0218942286122286Initial program 63.3
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0218942286122286 < x < 0.0009623921030137705Initial program 58.9
Taylor expanded around 0 0.2
Simplified0.2
if 0.0009623921030137705 < x Initial program 31.7
rmApplied add-sqr-sqrt31.7
Applied hypot-def0.1
Final simplification0.1
herbie shell --seed 2019196 +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)))))