\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.0000000031820615:\\
\;\;\;\;\left(1 \cdot x + \log 1\right) - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(1 + x\right)\\
\end{array}double f(double x) {
double r74623 = 1.0;
double r74624 = x;
double r74625 = r74623 + r74624;
double r74626 = log(r74625);
return r74626;
}
double f(double x) {
double r74627 = 1.0;
double r74628 = x;
double r74629 = r74627 + r74628;
double r74630 = 1.0000000031820615;
bool r74631 = r74629 <= r74630;
double r74632 = r74627 * r74628;
double r74633 = log(r74627);
double r74634 = r74632 + r74633;
double r74635 = 0.5;
double r74636 = 2.0;
double r74637 = pow(r74628, r74636);
double r74638 = pow(r74627, r74636);
double r74639 = r74637 / r74638;
double r74640 = r74635 * r74639;
double r74641 = r74634 - r74640;
double r74642 = log(r74629);
double r74643 = r74631 ? r74641 : r74642;
return r74643;
}




Bits error versus x
Results
| Original | 39.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (+ 1.0 x) < 1.0000000031820615Initial program 59.3
Taylor expanded around 0 0.3
if 1.0000000031820615 < (+ 1.0 x) Initial program 0.4
Final simplification0.3
herbie shell --seed 2020042
(FPCore (x)
:name "ln(1 + x)"
:precision binary64
:herbie-target
(if (== (+ 1 x) 1) x (/ (* x (log (+ 1 x))) (- (+ 1 x) 1)))
(log (+ 1 x)))