\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.016870309496290980533217407355550676584:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.5}{x} - \frac{-0.0625}{{x}^{5}}\right)\right)\\
\mathbf{elif}\;x \le 0.8818798333827607693891081908077467232943:\\
\;\;\;\;\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(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right)\right)\\
\end{array}double f(double x) {
double r127958 = x;
double r127959 = r127958 * r127958;
double r127960 = 1.0;
double r127961 = r127959 + r127960;
double r127962 = sqrt(r127961);
double r127963 = r127958 + r127962;
double r127964 = log(r127963);
return r127964;
}
double f(double x) {
double r127965 = x;
double r127966 = -1.016870309496291;
bool r127967 = r127965 <= r127966;
double r127968 = 0.125;
double r127969 = 3.0;
double r127970 = pow(r127965, r127969);
double r127971 = r127968 / r127970;
double r127972 = 0.5;
double r127973 = r127972 / r127965;
double r127974 = 0.0625;
double r127975 = -r127974;
double r127976 = 5.0;
double r127977 = pow(r127965, r127976);
double r127978 = r127975 / r127977;
double r127979 = r127973 - r127978;
double r127980 = r127971 - r127979;
double r127981 = log(r127980);
double r127982 = 0.8818798333827608;
bool r127983 = r127965 <= r127982;
double r127984 = 1.0;
double r127985 = sqrt(r127984);
double r127986 = log(r127985);
double r127987 = r127965 / r127985;
double r127988 = r127986 + r127987;
double r127989 = 0.16666666666666666;
double r127990 = pow(r127985, r127969);
double r127991 = r127970 / r127990;
double r127992 = r127989 * r127991;
double r127993 = r127988 - r127992;
double r127994 = r127965 + r127973;
double r127995 = r127994 - r127971;
double r127996 = r127965 + r127995;
double r127997 = log(r127996);
double r127998 = r127983 ? r127993 : r127997;
double r127999 = r127967 ? r127981 : r127998;
return r127999;
}




Bits error versus x
Results
| Original | 52.5 |
|---|---|
| Target | 44.7 |
| Herbie | 0.3 |
if x < -1.016870309496291Initial program 62.7
Taylor expanded around -inf 0.2
Simplified0.2
if -1.016870309496291 < x < 0.8818798333827608Initial program 58.5
Taylor expanded around 0 0.3
if 0.8818798333827608 < x Initial program 30.9
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019308
(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)))))