\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.00016988036905788884:\\
\;\;\;\;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 r1653676 = 1.0;
double r1653677 = x;
double r1653678 = r1653676 + r1653677;
double r1653679 = log(r1653678);
return r1653679;
}
double f(double x) {
double r1653680 = x;
double r1653681 = 0.00016988036905788884;
bool r1653682 = r1653680 <= r1653681;
double r1653683 = -0.5;
double r1653684 = 0.3333333333333333;
double r1653685 = r1653684 * r1653680;
double r1653686 = r1653683 + r1653685;
double r1653687 = r1653680 * r1653686;
double r1653688 = r1653687 * r1653680;
double r1653689 = r1653680 + r1653688;
double r1653690 = 1.0;
double r1653691 = r1653680 + r1653690;
double r1653692 = sqrt(r1653691);
double r1653693 = log(r1653692);
double r1653694 = r1653693 + r1653693;
double r1653695 = r1653682 ? r1653689 : r1653694;
return r1653695;
}




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