\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.007727857611265598336558468872681260109:\\
\;\;\;\;\log \left(\frac{-0.0625}{{x}^{5}} + \frac{1}{x} \cdot \left(\frac{0.125}{{x}^{2}} - 0.5\right)\right)\\
\mathbf{elif}\;x \le 0.8829155360744279645857091054494958370924:\\
\;\;\;\;\left(\log \left(\sqrt{1}\right) + \frac{x}{\sqrt{1}}\right) - \frac{1}{6} \cdot \frac{{x}^{3}}{{\left(\sqrt{1}\right)}^{3}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + \left(\left(x - 0.125 \cdot \frac{1}{{x}^{3}}\right) + \frac{0.5}{x}\right)\right)\\
\end{array}double f(double x) {
double r107171 = x;
double r107172 = r107171 * r107171;
double r107173 = 1.0;
double r107174 = r107172 + r107173;
double r107175 = sqrt(r107174);
double r107176 = r107171 + r107175;
double r107177 = log(r107176);
return r107177;
}
double f(double x) {
double r107178 = x;
double r107179 = -1.0077278576112656;
bool r107180 = r107178 <= r107179;
double r107181 = 0.0625;
double r107182 = -r107181;
double r107183 = 5.0;
double r107184 = pow(r107178, r107183);
double r107185 = r107182 / r107184;
double r107186 = 1.0;
double r107187 = r107186 / r107178;
double r107188 = 0.125;
double r107189 = 2.0;
double r107190 = pow(r107178, r107189);
double r107191 = r107188 / r107190;
double r107192 = 0.5;
double r107193 = r107191 - r107192;
double r107194 = r107187 * r107193;
double r107195 = r107185 + r107194;
double r107196 = log(r107195);
double r107197 = 0.882915536074428;
bool r107198 = r107178 <= r107197;
double r107199 = 1.0;
double r107200 = sqrt(r107199);
double r107201 = log(r107200);
double r107202 = r107178 / r107200;
double r107203 = r107201 + r107202;
double r107204 = 0.16666666666666666;
double r107205 = 3.0;
double r107206 = pow(r107178, r107205);
double r107207 = pow(r107200, r107205);
double r107208 = r107206 / r107207;
double r107209 = r107204 * r107208;
double r107210 = r107203 - r107209;
double r107211 = r107186 / r107206;
double r107212 = r107188 * r107211;
double r107213 = r107178 - r107212;
double r107214 = r107192 / r107178;
double r107215 = r107213 + r107214;
double r107216 = r107178 + r107215;
double r107217 = log(r107216);
double r107218 = r107198 ? r107210 : r107217;
double r107219 = r107180 ? r107196 : r107218;
return r107219;
}




Bits error versus x
Results
| Original | 53.2 |
|---|---|
| Target | 45.1 |
| Herbie | 0.2 |
if x < -1.0077278576112656Initial program 63.0
Taylor expanded around -inf 0.2
Simplified0.2
if -1.0077278576112656 < x < 0.882915536074428Initial program 58.6
Taylor expanded around 0 0.3
if 0.882915536074428 < x Initial program 32.2
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019297
(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)))))