\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 r3804946 = 1.0;
double r3804947 = x;
double r3804948 = r3804946 + r3804947;
double r3804949 = log(r3804948);
return r3804949;
}
double f(double x) {
double r3804950 = x;
double r3804951 = 1.0;
double r3804952 = r3804950 + r3804951;
bool r3804953 = r3804952 <= r3804951;
double r3804954 = 0.5;
double r3804955 = r3804954 * r3804950;
double r3804956 = r3804951 - r3804955;
double r3804957 = r3804950 * r3804956;
double r3804958 = log(r3804951);
double r3804959 = r3804957 + r3804958;
double r3804960 = sqrt(r3804952);
double r3804961 = log(r3804960);
double r3804962 = r3804961 + r3804961;
double r3804963 = r3804953 ? r3804959 : r3804962;
return r3804963;
}




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)))