\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1:\\
\;\;\;\;\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 r87560 = 1.0;
double r87561 = x;
double r87562 = r87560 + r87561;
double r87563 = log(r87562);
return r87563;
}
double f(double x) {
double r87564 = 1.0;
double r87565 = x;
double r87566 = r87564 + r87565;
bool r87567 = r87566 <= r87564;
double r87568 = r87564 * r87565;
double r87569 = log(r87564);
double r87570 = r87568 + r87569;
double r87571 = 0.5;
double r87572 = 2.0;
double r87573 = pow(r87565, r87572);
double r87574 = pow(r87564, r87572);
double r87575 = r87573 / r87574;
double r87576 = r87571 * r87575;
double r87577 = r87570 - r87576;
double r87578 = log(r87566);
double r87579 = r87567 ? r87577 : r87578;
return r87579;
}




Bits error versus x
Results
| Original | 39.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.6 |
if (+ 1.0 x) < 1.0Initial program 59.6
Taylor expanded around 0 0.3
if 1.0 < (+ 1.0 x) Initial program 1.2
Final simplification0.6
herbie shell --seed 2020046
(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)))