\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.009816372300169629028232520795427262783:\\
\;\;\;\;\log \left(\frac{\frac{0.125}{x}}{x \cdot x} - \left(\frac{0.0625}{{x}^{5}} + \frac{0.5}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.8987700841367661785952236641605850309134:\\
\;\;\;\;\frac{x}{\sqrt{1}} + \left(\log \left(\sqrt{1}\right) - \frac{\frac{1}{6}}{\frac{\sqrt{1}}{\frac{\left(x \cdot x\right) \cdot x}{1}}}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{\frac{0.125}{x}}{x \cdot x}\right)\right)\right)\\
\end{array}double f(double x) {
double r6930187 = x;
double r6930188 = r6930187 * r6930187;
double r6930189 = 1.0;
double r6930190 = r6930188 + r6930189;
double r6930191 = sqrt(r6930190);
double r6930192 = r6930187 + r6930191;
double r6930193 = log(r6930192);
return r6930193;
}
double f(double x) {
double r6930194 = x;
double r6930195 = -1.0098163723001696;
bool r6930196 = r6930194 <= r6930195;
double r6930197 = 0.125;
double r6930198 = r6930197 / r6930194;
double r6930199 = r6930194 * r6930194;
double r6930200 = r6930198 / r6930199;
double r6930201 = 0.0625;
double r6930202 = 5.0;
double r6930203 = pow(r6930194, r6930202);
double r6930204 = r6930201 / r6930203;
double r6930205 = 0.5;
double r6930206 = r6930205 / r6930194;
double r6930207 = r6930204 + r6930206;
double r6930208 = r6930200 - r6930207;
double r6930209 = log(r6930208);
double r6930210 = 0.8987700841367662;
bool r6930211 = r6930194 <= r6930210;
double r6930212 = 1.0;
double r6930213 = sqrt(r6930212);
double r6930214 = r6930194 / r6930213;
double r6930215 = log(r6930213);
double r6930216 = 0.16666666666666666;
double r6930217 = r6930199 * r6930194;
double r6930218 = r6930217 / r6930212;
double r6930219 = r6930213 / r6930218;
double r6930220 = r6930216 / r6930219;
double r6930221 = r6930215 - r6930220;
double r6930222 = r6930214 + r6930221;
double r6930223 = r6930194 - r6930200;
double r6930224 = r6930206 + r6930223;
double r6930225 = r6930194 + r6930224;
double r6930226 = log(r6930225);
double r6930227 = r6930211 ? r6930222 : r6930226;
double r6930228 = r6930196 ? r6930209 : r6930227;
return r6930228;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.5 |
| Herbie | 0.2 |
if x < -1.0098163723001696Initial program 62.8
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0098163723001696 < x < 0.8987700841367662Initial program 58.8
Taylor expanded around 0 0.2
Simplified0.2
if 0.8987700841367662 < x Initial program 32.7
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019171
(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)))))