\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x + 1 \le 1.000051798647896950100744106748607009649:\\
\;\;\;\;\left(\left(\left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot \frac{x}{1}\right) \cdot 0.3333333333333333148296162562473909929395 + \left(\left(\frac{x}{1} \cdot \frac{x}{1}\right) \cdot 0.5 + 1 \cdot x\right)\right) + \left(1 \cdot \left(\left(x \cdot x\right) \cdot x\right) - 1 \cdot \left(\frac{\frac{\left(x \cdot x\right) \cdot x}{1}}{1} + x \cdot x\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + 1\right)\\
\end{array}double f(double x) {
double r3070363 = 1.0;
double r3070364 = x;
double r3070365 = r3070363 + r3070364;
double r3070366 = log(r3070365);
return r3070366;
}
double f(double x) {
double r3070367 = x;
double r3070368 = 1.0;
double r3070369 = r3070367 + r3070368;
double r3070370 = 1.000051798647897;
bool r3070371 = r3070369 <= r3070370;
double r3070372 = r3070367 / r3070368;
double r3070373 = r3070372 * r3070372;
double r3070374 = r3070373 * r3070372;
double r3070375 = 0.3333333333333333;
double r3070376 = r3070374 * r3070375;
double r3070377 = 0.5;
double r3070378 = r3070373 * r3070377;
double r3070379 = r3070368 * r3070367;
double r3070380 = r3070378 + r3070379;
double r3070381 = r3070376 + r3070380;
double r3070382 = r3070367 * r3070367;
double r3070383 = r3070382 * r3070367;
double r3070384 = r3070368 * r3070383;
double r3070385 = r3070383 / r3070368;
double r3070386 = r3070385 / r3070368;
double r3070387 = r3070386 + r3070382;
double r3070388 = r3070368 * r3070387;
double r3070389 = r3070384 - r3070388;
double r3070390 = r3070381 + r3070389;
double r3070391 = log(r3070369);
double r3070392 = r3070371 ? r3070390 : r3070391;
return r3070392;
}




Bits error versus x
Results
| Original | 39.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.2 |
if (+ 1.0 x) < 1.000051798647897Initial program 58.9
rmApplied flip3-+59.0
Applied log-div58.9
Simplified58.9
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)))