\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.00011713184139444529:\\
\;\;\;\;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 r11144241 = 1.0;
double r11144242 = x;
double r11144243 = r11144241 + r11144242;
double r11144244 = log(r11144243);
return r11144244;
}
double f(double x) {
double r11144245 = x;
double r11144246 = 0.00011713184139444529;
bool r11144247 = r11144245 <= r11144246;
double r11144248 = -0.5;
double r11144249 = 0.3333333333333333;
double r11144250 = r11144249 * r11144245;
double r11144251 = r11144248 + r11144250;
double r11144252 = r11144245 * r11144251;
double r11144253 = r11144252 * r11144245;
double r11144254 = r11144245 + r11144253;
double r11144255 = 1.0;
double r11144256 = r11144245 + r11144255;
double r11144257 = log(r11144256);
double r11144258 = r11144247 ? r11144254 : r11144257;
return r11144258;
}




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