\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x + 1 \le 1:\\
\;\;\;\;x \cdot \left(1 - 0.5 \cdot x\right) + \log 1\\
\mathbf{else}:\\
\;\;\;\;\log \left(\sqrt{x + 1}\right) + \log \left(\sqrt{x + 1}\right)\\
\end{array}double f(double x) {
double r3543494 = 1.0;
double r3543495 = x;
double r3543496 = r3543494 + r3543495;
double r3543497 = log(r3543496);
return r3543497;
}
double f(double x) {
double r3543498 = x;
double r3543499 = 1.0;
double r3543500 = r3543498 + r3543499;
bool r3543501 = r3543500 <= r3543499;
double r3543502 = 0.5;
double r3543503 = r3543502 * r3543498;
double r3543504 = r3543499 - r3543503;
double r3543505 = r3543498 * r3543504;
double r3543506 = log(r3543499);
double r3543507 = r3543505 + r3543506;
double r3543508 = sqrt(r3543500);
double r3543509 = log(r3543508);
double r3543510 = r3543509 + r3543509;
double r3543511 = r3543501 ? r3543507 : r3543510;
return r3543511;
}




Bits error versus x
Results
| Original | 39.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.6 |
if (+ 1.0 x) < 1.0Initial program 59.5
Taylor expanded around 0 0.3
Simplified0.3
Taylor expanded around 0 0.3
Simplified0.3
if 1.0 < (+ 1.0 x) Initial program 0.9
rmApplied add-sqr-sqrt1.0
Applied log-prod1.0
Final simplification0.6
herbie shell --seed 2019171
(FPCore (x)
:name "ln(1 + x)"
:herbie-target
(if (== (+ 1.0 x) 1.0) x (/ (* x (log (+ 1.0 x))) (- (+ 1.0 x) 1.0)))
(log (+ 1.0 x)))