\log \left(x + \sqrt{x \cdot x + 1}\right)\begin{array}{l}
\mathbf{if}\;x \le -1.0776022250282242:\\
\;\;\;\;\log \left(\frac{\frac{-1}{16}}{\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)} + \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \frac{\frac{1}{2}}{x}\right)\right)\\
\mathbf{elif}\;x \le 0.955290469990551:\\
\;\;\;\;\left(\frac{3}{40} \cdot \left(\left(x \cdot x\right) \cdot \left(\left(x \cdot x\right) \cdot x\right)\right) + \left(\left(x \cdot x\right) \cdot x\right) \cdot \frac{-1}{6}\right) + x\\
\mathbf{else}:\\
\;\;\;\;\log \left(\frac{\frac{1}{2}}{x} - \left(\frac{\frac{\frac{1}{8}}{x}}{x \cdot x} - \left(x + x\right)\right)\right)\\
\end{array}double f(double x) {
double r6415484 = x;
double r6415485 = r6415484 * r6415484;
double r6415486 = 1.0;
double r6415487 = r6415485 + r6415486;
double r6415488 = sqrt(r6415487);
double r6415489 = r6415484 + r6415488;
double r6415490 = log(r6415489);
return r6415490;
}
double f(double x) {
double r6415491 = x;
double r6415492 = -1.0776022250282242;
bool r6415493 = r6415491 <= r6415492;
double r6415494 = -0.0625;
double r6415495 = r6415491 * r6415491;
double r6415496 = r6415495 * r6415491;
double r6415497 = r6415495 * r6415496;
double r6415498 = r6415494 / r6415497;
double r6415499 = 0.125;
double r6415500 = r6415499 / r6415491;
double r6415501 = r6415500 / r6415495;
double r6415502 = 0.5;
double r6415503 = r6415502 / r6415491;
double r6415504 = r6415501 - r6415503;
double r6415505 = r6415498 + r6415504;
double r6415506 = log(r6415505);
double r6415507 = 0.955290469990551;
bool r6415508 = r6415491 <= r6415507;
double r6415509 = 0.075;
double r6415510 = r6415509 * r6415497;
double r6415511 = -0.16666666666666666;
double r6415512 = r6415496 * r6415511;
double r6415513 = r6415510 + r6415512;
double r6415514 = r6415513 + r6415491;
double r6415515 = r6415491 + r6415491;
double r6415516 = r6415501 - r6415515;
double r6415517 = r6415503 - r6415516;
double r6415518 = log(r6415517);
double r6415519 = r6415508 ? r6415514 : r6415518;
double r6415520 = r6415493 ? r6415506 : r6415519;
return r6415520;
}




Bits error versus x
Results
| Original | 52.6 |
|---|---|
| Target | 45.0 |
| Herbie | 0.2 |
if x < -1.0776022250282242Initial program 62.0
Taylor expanded around -inf 0.1
Simplified0.1
if -1.0776022250282242 < x < 0.955290469990551Initial program 58.7
Taylor expanded around 0 0.2
Simplified0.2
if 0.955290469990551 < x Initial program 30.4
Taylor expanded around inf 0.3
Simplified0.3
Final simplification0.2
herbie shell --seed 2019149
(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)))))