\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.000000000143161:\\
\;\;\;\;\left(1 \cdot x + \log 1\right) - \frac{1}{2} \cdot \frac{{x}^{2}}{{1}^{2}}\\
\mathbf{else}:\\
\;\;\;\;\log \left(1 + x\right)\\
\end{array}double f(double x) {
double r52160 = 1.0;
double r52161 = x;
double r52162 = r52160 + r52161;
double r52163 = log(r52162);
return r52163;
}
double f(double x) {
double r52164 = 1.0;
double r52165 = x;
double r52166 = r52164 + r52165;
double r52167 = 1.000000000143161;
bool r52168 = r52166 <= r52167;
double r52169 = r52164 * r52165;
double r52170 = log(r52164);
double r52171 = r52169 + r52170;
double r52172 = 0.5;
double r52173 = 2.0;
double r52174 = pow(r52165, r52173);
double r52175 = pow(r52164, r52173);
double r52176 = r52174 / r52175;
double r52177 = r52172 * r52176;
double r52178 = r52171 - r52177;
double r52179 = log(r52166);
double r52180 = r52168 ? r52178 : r52179;
return r52180;
}




Bits error versus x
Results
| Original | 39.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.4 |
if (+ 1.0 x) < 1.000000000143161Initial program 59.2
Taylor expanded around 0 0.4
if 1.000000000143161 < (+ 1.0 x) Initial program 0.4
Final simplification0.4
herbie shell --seed 2020062
(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)))