\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x + 1 \le 1:\\
\;\;\;\;1 \cdot x + \left(\log 1 - \left(\frac{x}{1} \cdot \frac{1}{2}\right) \cdot \frac{x}{1}\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(x + 1\right)\\
\end{array}double f(double x) {
double r3117999 = 1.0;
double r3118000 = x;
double r3118001 = r3117999 + r3118000;
double r3118002 = log(r3118001);
return r3118002;
}
double f(double x) {
double r3118003 = x;
double r3118004 = 1.0;
double r3118005 = r3118003 + r3118004;
bool r3118006 = r3118005 <= r3118004;
double r3118007 = r3118004 * r3118003;
double r3118008 = log(r3118004);
double r3118009 = r3118003 / r3118004;
double r3118010 = 0.5;
double r3118011 = r3118009 * r3118010;
double r3118012 = r3118011 * r3118009;
double r3118013 = r3118008 - r3118012;
double r3118014 = r3118007 + r3118013;
double r3118015 = log(r3118005);
double r3118016 = r3118006 ? r3118014 : r3118015;
return r3118016;
}




Bits error versus x
Results
| Original | 39.3 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
if (+ 1.0 x) < 1.0Initial program 59.6
Taylor expanded around 0 0.3
Simplified0.3
if 1.0 < (+ 1.0 x) Initial program 1.3
Final simplification0.6
herbie shell --seed 2019172
(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)))