\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.00000202420025896543620547163300216198:\\
\;\;\;\;\left(x \cdot 1 + x \cdot \frac{\frac{-1}{2}}{\frac{1 \cdot 1}{x}}\right) + \log 1\\
\mathbf{else}:\\
\;\;\;\;\log \left(1 + x\right)\\
\end{array}double f(double x) {
double r51232 = 1.0;
double r51233 = x;
double r51234 = r51232 + r51233;
double r51235 = log(r51234);
return r51235;
}
double f(double x) {
double r51236 = 1.0;
double r51237 = x;
double r51238 = r51236 + r51237;
double r51239 = 1.000002024200259;
bool r51240 = r51238 <= r51239;
double r51241 = r51237 * r51236;
double r51242 = -0.5;
double r51243 = r51236 * r51236;
double r51244 = r51243 / r51237;
double r51245 = r51242 / r51244;
double r51246 = r51237 * r51245;
double r51247 = r51241 + r51246;
double r51248 = log(r51236);
double r51249 = r51247 + r51248;
double r51250 = log(r51238);
double r51251 = r51240 ? r51249 : r51250;
return r51251;
}




Bits error versus x
Results
| Original | 39.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (+ 1.0 x) < 1.000002024200259Initial program 59.1
Taylor expanded around 0 0.3
Simplified0.3
rmApplied distribute-lft-in0.3
if 1.000002024200259 < (+ 1.0 x) Initial program 0.1
Final simplification0.3
herbie shell --seed 2019323
(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)))