\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0529948069434159:\\
\;\;\;\;\log \left(\frac{\frac{-1}{16}}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)} + \left(\frac{\frac{1}{8}}{\left(x \cdot x\right) \cdot x} - \frac{\frac{1}{2}}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.9556310302201441:\\
\;\;\;\;x + \left(\left(x \cdot x\right) \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot \frac{3}{40} - \frac{1}{6}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\frac{\frac{1}{2}}{x} + \left(\frac{\frac{-1}{8}}{\left(x \cdot x\right) \cdot x} + x\right)\right)\right)\\
\end{array}double f(double x) {
double r6724179 = x;
double r6724180 = r6724179 * r6724179;
double r6724181 = 1.0;
double r6724182 = r6724180 + r6724181;
double r6724183 = sqrt(r6724182);
double r6724184 = r6724179 + r6724183;
double r6724185 = log(r6724184);
return r6724185;
}
double f(double x) {
double r6724186 = x;
double r6724187 = -1.0529948069434159;
bool r6724188 = r6724186 <= r6724187;
double r6724189 = -0.0625;
double r6724190 = r6724186 * r6724186;
double r6724191 = r6724190 * r6724186;
double r6724192 = r6724190 * r6724191;
double r6724193 = r6724189 / r6724192;
double r6724194 = 0.125;
double r6724195 = r6724194 / r6724191;
double r6724196 = 0.5;
double r6724197 = r6724196 / r6724186;
double r6724198 = r6724195 - r6724197;
double r6724199 = r6724193 + r6724198;
double r6724200 = log(r6724199);
double r6724201 = 0.9556310302201441;
bool r6724202 = r6724186 <= r6724201;
double r6724203 = 0.075;
double r6724204 = r6724190 * r6724203;
double r6724205 = 0.16666666666666666;
double r6724206 = r6724204 - r6724205;
double r6724207 = r6724191 * r6724206;
double r6724208 = r6724186 + r6724207;
double r6724209 = -0.125;
double r6724210 = r6724209 / r6724191;
double r6724211 = r6724210 + r6724186;
double r6724212 = r6724197 + r6724211;
double r6724213 = r6724186 + r6724212;
double r6724214 = log(r6724213);
double r6724215 = r6724202 ? r6724208 : r6724214;
double r6724216 = r6724188 ? r6724200 : r6724215;
return r6724216;
}




Bits error versus x
Results
| Original | 52.7 |
|---|---|
| Target | 44.9 |
| Herbie | 0.2 |
if x < -1.0529948069434159Initial program 61.8
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0529948069434159 < x < 0.9556310302201441Initial program 58.4
Taylor expanded around 0 0.3
Simplified0.3
Taylor expanded around -inf 0.3
Simplified0.3
if 0.9556310302201441 < x Initial program 32.1
Taylor expanded around inf 0.1
Simplified0.1
Final simplification0.2
herbie shell --seed 2019141
(FPCore (x)
:name "Hyperbolic arcsine"
:herbie-target
(if (< x 0) (log (/ -1 (- x (sqrt (+ (* x x) 1))))) (log (+ x (sqrt (+ (* x x) 1)))))
(log (+ x (sqrt (+ (* x x) 1)))))