\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.000000464934527766303062890074215829372:\\
\;\;\;\;\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 r84888 = 1.0;
double r84889 = x;
double r84890 = r84888 + r84889;
double r84891 = log(r84890);
return r84891;
}
double f(double x) {
double r84892 = 1.0;
double r84893 = x;
double r84894 = r84892 + r84893;
double r84895 = 1.0000004649345278;
bool r84896 = r84894 <= r84895;
double r84897 = r84893 * r84892;
double r84898 = -0.5;
double r84899 = r84892 * r84892;
double r84900 = r84899 / r84893;
double r84901 = r84898 / r84900;
double r84902 = r84893 * r84901;
double r84903 = r84897 + r84902;
double r84904 = log(r84892);
double r84905 = r84903 + r84904;
double r84906 = log(r84894);
double r84907 = r84896 ? r84905 : r84906;
return r84907;
}




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