\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.0001027760451352802:\\
\;\;\;\;x + \left(x \cdot \left(\frac{-1}{2} + \frac{1}{3} \cdot x\right)\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + 1\right)\\
\end{array}double f(double x) {
double r2917439 = 1.0;
double r2917440 = x;
double r2917441 = r2917439 + r2917440;
double r2917442 = log(r2917441);
return r2917442;
}
double f(double x) {
double r2917443 = x;
double r2917444 = 0.0001027760451352802;
bool r2917445 = r2917443 <= r2917444;
double r2917446 = -0.5;
double r2917447 = 0.3333333333333333;
double r2917448 = r2917447 * r2917443;
double r2917449 = r2917446 + r2917448;
double r2917450 = r2917443 * r2917449;
double r2917451 = r2917450 * r2917443;
double r2917452 = r2917443 + r2917451;
double r2917453 = 1.0;
double r2917454 = r2917443 + r2917453;
double r2917455 = log(r2917454);
double r2917456 = r2917445 ? r2917452 : r2917455;
return r2917456;
}




Bits error versus x
Results
| Original | 38.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
if x < 0.0001027760451352802Initial program 58.9
Taylor expanded around 0 0.2
Simplified0.2
if 0.0001027760451352802 < x Initial program 0.1
Final simplification0.2
herbie shell --seed 2019129
(FPCore (x)
:name "ln(1 + x)"
:herbie-target
(if (== (+ 1 x) 1) x (/ (* x (log (+ 1 x))) (- (+ 1 x) 1)))
(log (+ 1 x)))