\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.002275654089841649962977498944383114576:\\
\;\;\;\;\log \left(\frac{0.125}{{x}^{3}} - \left(\frac{0.0625}{{x}^{5}} + \frac{0.5}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.8884086436842496548038639048172626644373:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{\frac{1}{6}}{1} \cdot \frac{{x}^{3}}{\sqrt{1}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(\left(\left(x + \frac{0.5}{x}\right) - \frac{0.125}{{x}^{3}}\right) + x\right)\\
\end{array}double f(double x) {
double r150180 = x;
double r150181 = r150180 * r150180;
double r150182 = 1.0;
double r150183 = r150181 + r150182;
double r150184 = sqrt(r150183);
double r150185 = r150180 + r150184;
double r150186 = log(r150185);
return r150186;
}
double f(double x) {
double r150187 = x;
double r150188 = -1.0022756540898416;
bool r150189 = r150187 <= r150188;
double r150190 = 0.125;
double r150191 = 3.0;
double r150192 = pow(r150187, r150191);
double r150193 = r150190 / r150192;
double r150194 = 0.0625;
double r150195 = 5.0;
double r150196 = pow(r150187, r150195);
double r150197 = r150194 / r150196;
double r150198 = 0.5;
double r150199 = r150198 / r150187;
double r150200 = r150197 + r150199;
double r150201 = r150193 - r150200;
double r150202 = log(r150201);
double r150203 = 0.8884086436842497;
bool r150204 = r150187 <= r150203;
double r150205 = 1.0;
double r150206 = sqrt(r150205);
double r150207 = log(r150206);
double r150208 = r150187 / r150206;
double r150209 = r150207 + r150208;
double r150210 = 0.16666666666666666;
double r150211 = r150210 / r150205;
double r150212 = r150192 / r150206;
double r150213 = r150211 * r150212;
double r150214 = r150209 - r150213;
double r150215 = r150187 + r150199;
double r150216 = r150215 - r150193;
double r150217 = r150216 + r150187;
double r150218 = log(r150217);
double r150219 = r150204 ? r150214 : r150218;
double r150220 = r150189 ? r150202 : r150219;
return r150220;
}




Bits error versus x
Results
| Original | 52.8 |
|---|---|
| Target | 45.0 |
| Herbie | 0.2 |
if x < -1.0022756540898416Initial program 63.1
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0022756540898416 < x < 0.8884086436842497Initial program 58.7
Taylor expanded around 0 0.3
Simplified0.3
if 0.8884086436842497 < x Initial program 31.4
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019194
(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)))))