\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.00011553166146108893:\\
\;\;\;\;x + \left(x \cdot \left(\frac{-1}{2} + \frac{1}{3} \cdot x\right)\right) \cdot x\\
\mathbf{else}:\\
\;\;\;\;\log \left(\sqrt{x + 1}\right) + \log \left(\sqrt{x + 1}\right)\\
\end{array}double f(double x) {
double r5867887 = 1.0;
double r5867888 = x;
double r5867889 = r5867887 + r5867888;
double r5867890 = log(r5867889);
return r5867890;
}
double f(double x) {
double r5867891 = x;
double r5867892 = 0.00011553166146108893;
bool r5867893 = r5867891 <= r5867892;
double r5867894 = -0.5;
double r5867895 = 0.3333333333333333;
double r5867896 = r5867895 * r5867891;
double r5867897 = r5867894 + r5867896;
double r5867898 = r5867891 * r5867897;
double r5867899 = r5867898 * r5867891;
double r5867900 = r5867891 + r5867899;
double r5867901 = 1.0;
double r5867902 = r5867891 + r5867901;
double r5867903 = sqrt(r5867902);
double r5867904 = log(r5867903);
double r5867905 = r5867904 + r5867904;
double r5867906 = r5867893 ? r5867900 : r5867905;
return r5867906;
}




Bits error versus x
Results
| Original | 39.0 |
|---|---|
| Target | 0.2 |
| Herbie | 0.1 |
if x < 0.00011553166146108893Initial program 59.1
Taylor expanded around 0 0.2
Simplified0.2
if 0.00011553166146108893 < x Initial program 0.1
rmApplied add-sqr-sqrt0.1
Applied log-prod0.1
Final simplification0.1
herbie shell --seed 2019119
(FPCore (x)
:name "ln(1 + x)"
:herbie-target
(if (== (+ 1 x) 1) x (/ (* x (log (+ 1 x))) (- (+ 1 x) 1)))
(log (+ 1 x)))