\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.026591513399979893605973302328493446112:\\
\;\;\;\;\log \left(\frac{0.125}{\left(x \cdot x\right) \cdot x} - \left(\frac{0.0625}{{x}^{5}} + \frac{0.5}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.8907247814494133608675952018529642373323:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{\frac{1}{6}}{1} \cdot \frac{\left(x \cdot x\right) \cdot x}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{\left(x \cdot x\right) \cdot x}\right) + x\right)\\
\end{array}double f(double x) {
double r8289152 = x;
double r8289153 = r8289152 * r8289152;
double r8289154 = 1.0;
double r8289155 = r8289153 + r8289154;
double r8289156 = sqrt(r8289155);
double r8289157 = r8289152 + r8289156;
double r8289158 = log(r8289157);
return r8289158;
}
double f(double x) {
double r8289159 = x;
double r8289160 = -1.02659151339998;
bool r8289161 = r8289159 <= r8289160;
double r8289162 = 0.125;
double r8289163 = r8289159 * r8289159;
double r8289164 = r8289163 * r8289159;
double r8289165 = r8289162 / r8289164;
double r8289166 = 0.0625;
double r8289167 = 5.0;
double r8289168 = pow(r8289159, r8289167);
double r8289169 = r8289166 / r8289168;
double r8289170 = 0.5;
double r8289171 = r8289170 / r8289159;
double r8289172 = r8289169 + r8289171;
double r8289173 = r8289165 - r8289172;
double r8289174 = log(r8289173);
double r8289175 = 0.8907247814494134;
bool r8289176 = r8289159 <= r8289175;
double r8289177 = 1.0;
double r8289178 = sqrt(r8289177);
double r8289179 = log(r8289178);
double r8289180 = r8289159 / r8289178;
double r8289181 = r8289179 + r8289180;
double r8289182 = 0.16666666666666666;
double r8289183 = r8289182 / r8289177;
double r8289184 = r8289164 / r8289178;
double r8289185 = r8289183 * r8289184;
double r8289186 = r8289181 - r8289185;
double r8289187 = r8289159 + r8289171;
double r8289188 = r8289187 - r8289165;
double r8289189 = r8289188 + r8289159;
double r8289190 = log(r8289189);
double r8289191 = r8289176 ? r8289186 : r8289190;
double r8289192 = r8289161 ? r8289174 : r8289191;
return r8289192;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.0 |
| Herbie | 0.2 |
if x < -1.02659151339998Initial program 63.0
Taylor expanded around -inf 0.2
Simplified0.2
if -1.02659151339998 < x < 0.8907247814494134Initial program 58.6
Taylor expanded around 0 0.3
Simplified0.3
if 0.8907247814494134 < x Initial program 32.1
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019174
(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)))))