\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.00015125854089797293:\\
\;\;\;\;x + \left(x \cdot x\right) \cdot \left(\frac{-1}{2} + \frac{1}{3} \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;\log \left(\sqrt{x + 1}\right) + \log \left(\sqrt{x + 1}\right)\\
\end{array}double f(double x) {
double r6780709 = 1.0;
double r6780710 = x;
double r6780711 = r6780709 + r6780710;
double r6780712 = log(r6780711);
return r6780712;
}
double f(double x) {
double r6780713 = x;
double r6780714 = 0.00015125854089797293;
bool r6780715 = r6780713 <= r6780714;
double r6780716 = r6780713 * r6780713;
double r6780717 = -0.5;
double r6780718 = 0.3333333333333333;
double r6780719 = r6780718 * r6780713;
double r6780720 = r6780717 + r6780719;
double r6780721 = r6780716 * r6780720;
double r6780722 = r6780713 + r6780721;
double r6780723 = 1.0;
double r6780724 = r6780713 + r6780723;
double r6780725 = sqrt(r6780724);
double r6780726 = log(r6780725);
double r6780727 = r6780726 + r6780726;
double r6780728 = r6780715 ? r6780722 : r6780727;
return r6780728;
}




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