\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.0000000288683601:\\
\;\;\;\;\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 r52347 = 1.0;
double r52348 = x;
double r52349 = r52347 + r52348;
double r52350 = log(r52349);
return r52350;
}
double f(double x) {
double r52351 = 1.0;
double r52352 = x;
double r52353 = r52351 + r52352;
double r52354 = 1.0000000288683601;
bool r52355 = r52353 <= r52354;
double r52356 = r52351 * r52352;
double r52357 = log(r52351);
double r52358 = r52356 + r52357;
double r52359 = 0.5;
double r52360 = 2.0;
double r52361 = pow(r52352, r52360);
double r52362 = pow(r52351, r52360);
double r52363 = r52361 / r52362;
double r52364 = r52359 * r52363;
double r52365 = r52358 - r52364;
double r52366 = log(r52353);
double r52367 = r52355 ? r52365 : r52366;
return r52367;
}




Bits error versus x
Results
| Original | 38.8 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if (+ 1.0 x) < 1.0000000288683601Initial program 59.4
Taylor expanded around 0 0.3
if 1.0000000288683601 < (+ 1.0 x) Initial program 0.2
Final simplification0.2
herbie shell --seed 2019199
(FPCore (x)
:name "ln(1 + x)"
:herbie-target
(if (== (+ 1.0 x) 1.0) x (/ (* x (log (+ 1.0 x))) (- (+ 1.0 x) 1.0)))
(log (+ 1.0 x)))