\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.004740488829904077050514388247393071651:\\
\;\;\;\;\log \left(\left(\frac{0.125}{{x}^{3}} - \frac{0.0625}{{x}^{5}}\right) - \frac{0.5}{x}\right)\\
\mathbf{elif}\;x \le 0.8999222701664713053304467393900267779827:\\
\;\;\;\;\log \left(\sqrt{1}\right) + \left(\frac{-1}{6} \cdot \frac{x \cdot x}{1} + 1\right) \cdot \frac{x}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{0.5}{x} + \left(x - \frac{0.125}{{x}^{3}}\right)\right)\right)\\
\end{array}double f(double x) {
double r108210 = x;
double r108211 = r108210 * r108210;
double r108212 = 1.0;
double r108213 = r108211 + r108212;
double r108214 = sqrt(r108213);
double r108215 = r108210 + r108214;
double r108216 = log(r108215);
return r108216;
}
double f(double x) {
double r108217 = x;
double r108218 = -1.004740488829904;
bool r108219 = r108217 <= r108218;
double r108220 = 0.125;
double r108221 = 3.0;
double r108222 = pow(r108217, r108221);
double r108223 = r108220 / r108222;
double r108224 = 0.0625;
double r108225 = 5.0;
double r108226 = pow(r108217, r108225);
double r108227 = r108224 / r108226;
double r108228 = r108223 - r108227;
double r108229 = 0.5;
double r108230 = r108229 / r108217;
double r108231 = r108228 - r108230;
double r108232 = log(r108231);
double r108233 = 0.8999222701664713;
bool r108234 = r108217 <= r108233;
double r108235 = 1.0;
double r108236 = sqrt(r108235);
double r108237 = log(r108236);
double r108238 = -0.16666666666666666;
double r108239 = r108217 * r108217;
double r108240 = r108239 / r108235;
double r108241 = r108238 * r108240;
double r108242 = 1.0;
double r108243 = r108241 + r108242;
double r108244 = r108217 / r108236;
double r108245 = r108243 * r108244;
double r108246 = r108237 + r108245;
double r108247 = r108217 - r108223;
double r108248 = r108230 + r108247;
double r108249 = r108217 + r108248;
double r108250 = log(r108249);
double r108251 = r108234 ? r108246 : r108250;
double r108252 = r108219 ? r108232 : r108251;
return r108252;
}




Bits error versus x
Results
| Original | 53.3 |
|---|---|
| Target | 45.6 |
| Herbie | 0.2 |
if x < -1.004740488829904Initial program 62.5
Taylor expanded around -inf 0.2
Simplified0.2
if -1.004740488829904 < x < 0.8999222701664713Initial program 58.8
Taylor expanded around 0 0.2
Simplified0.2
if 0.8999222701664713 < x Initial program 32.8
Taylor expanded around inf 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019325
(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)))))