\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;1 + x \le 1.0000000482441602:\\
\;\;\;\;\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 r114538 = 1.0;
double r114539 = x;
double r114540 = r114538 + r114539;
double r114541 = log(r114540);
return r114541;
}
double f(double x) {
double r114542 = 1.0;
double r114543 = x;
double r114544 = r114542 + r114543;
double r114545 = 1.0000000482441602;
bool r114546 = r114544 <= r114545;
double r114547 = r114542 * r114543;
double r114548 = log(r114542);
double r114549 = r114547 + r114548;
double r114550 = 0.5;
double r114551 = 2.0;
double r114552 = pow(r114543, r114551);
double r114553 = pow(r114542, r114551);
double r114554 = r114552 / r114553;
double r114555 = r114550 * r114554;
double r114556 = r114549 - r114555;
double r114557 = log(r114544);
double r114558 = r114546 ? r114556 : r114557;
return r114558;
}




Bits error versus x
Results
| Original | 39.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.3 |
if (+ 1.0 x) < 1.0000000482441602Initial program 59.3
Taylor expanded around 0 0.3
if 1.0000000482441602 < (+ 1.0 x) Initial program 0.2
Final simplification0.3
herbie shell --seed 2020033
(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)))