\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.000051798647896950100744106748607009649:\\
\;\;\;\;\left(0.3333333333333333148296162562473909929395 \cdot \left(\left(x \cdot x\right) \cdot x\right) + 1 \cdot x\right) - \left(x \cdot x\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\log \left(1 + x\right)\\
\end{array}double f(double x) {
double r4530436 = 1.0;
double r4530437 = x;
double r4530438 = r4530436 + r4530437;
double r4530439 = log(r4530438);
return r4530439;
}
double f(double x) {
double r4530440 = 1.0;
double r4530441 = x;
double r4530442 = r4530440 + r4530441;
double r4530443 = 1.000051798647897;
bool r4530444 = r4530442 <= r4530443;
double r4530445 = 0.3333333333333333;
double r4530446 = r4530441 * r4530441;
double r4530447 = r4530446 * r4530441;
double r4530448 = r4530445 * r4530447;
double r4530449 = r4530440 * r4530441;
double r4530450 = r4530448 + r4530449;
double r4530451 = 0.5;
double r4530452 = r4530446 * r4530451;
double r4530453 = r4530450 - r4530452;
double r4530454 = log(r4530442);
double r4530455 = r4530444 ? r4530453 : r4530454;
return r4530455;
}




Bits error versus x
Results
| Original | 39.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if (+ 1.0 x) < 1.000051798647897Initial program 58.9
rmApplied flip-+59.0
Applied log-div58.9
Taylor expanded around 0 0.2
Simplified0.2
Taylor expanded around 0 0.2
Simplified0.2
if 1.000051798647897 < (+ 1.0 x) Initial program 0.1
Final simplification0.2
herbie shell --seed 2019174
(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)))