\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -0.995295059253408442856425608624704182148:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8946210124348296099938693259900901466608:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \left(x + \frac{{x}^{3}}{\frac{1}{\frac{-1}{6}}}\right) \cdot \frac{1}{\sqrt{1}}\\
\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 r135281 = x;
double r135282 = r135281 * r135281;
double r135283 = 1.0;
double r135284 = r135282 + r135283;
double r135285 = sqrt(r135284);
double r135286 = r135281 + r135285;
double r135287 = log(r135286);
return r135287;
}
double f(double x) {
double r135288 = x;
double r135289 = -0.9952950592534084;
bool r135290 = r135288 <= r135289;
double r135291 = 0.125;
double r135292 = 3.0;
double r135293 = pow(r135288, r135292);
double r135294 = r135291 / r135293;
double r135295 = 0.0625;
double r135296 = 5.0;
double r135297 = pow(r135288, r135296);
double r135298 = r135295 / r135297;
double r135299 = r135294 - r135298;
double r135300 = 0.5;
double r135301 = r135300 / r135288;
double r135302 = r135299 - r135301;
double r135303 = log(r135302);
double r135304 = 0.8946210124348296;
bool r135305 = r135288 <= r135304;
double r135306 = 1.0;
double r135307 = sqrt(r135306);
double r135308 = log(r135307);
double r135309 = -0.16666666666666666;
double r135310 = r135306 / r135309;
double r135311 = r135293 / r135310;
double r135312 = r135288 + r135311;
double r135313 = 1.0;
double r135314 = r135313 / r135307;
double r135315 = r135312 * r135314;
double r135316 = r135308 + r135315;
double r135317 = r135301 - r135294;
double r135318 = 2.0;
double r135319 = r135318 * r135288;
double r135320 = r135317 + r135319;
double r135321 = log(r135320);
double r135322 = r135305 ? r135316 : r135321;
double r135323 = r135290 ? r135303 : r135322;
return r135323;
}




Bits error versus x
Results
| Original | 53.4 |
|---|---|
| Target | 45.4 |
| Herbie | 0.2 |
if x < -0.9952950592534084Initial program 63.0
Taylor expanded around -inf 0.2
Simplified0.2
if -0.9952950592534084 < x < 0.8946210124348296Initial program 58.9
Taylor expanded around 0 0.2
Simplified0.2
rmApplied div-inv0.2
Applied associate-*r*0.2
Simplified0.2
if 0.8946210124348296 < x Initial program 31.7
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019350
(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)))))