\log \left(1 + x\right)
\begin{array}{l}
\mathbf{if}\;x \le 0.00014341067325748845:\\
\;\;\;\;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 r11409168 = 1.0;
double r11409169 = x;
double r11409170 = r11409168 + r11409169;
double r11409171 = log(r11409170);
return r11409171;
}
double f(double x) {
double r11409172 = x;
double r11409173 = 0.00014341067325748845;
bool r11409174 = r11409172 <= r11409173;
double r11409175 = -0.5;
double r11409176 = 0.3333333333333333;
double r11409177 = r11409176 * r11409172;
double r11409178 = r11409175 + r11409177;
double r11409179 = r11409172 * r11409178;
double r11409180 = r11409179 * r11409172;
double r11409181 = r11409172 + r11409180;
double r11409182 = 1.0;
double r11409183 = r11409172 + r11409182;
double r11409184 = sqrt(r11409183);
double r11409185 = log(r11409184);
double r11409186 = r11409185 + r11409185;
double r11409187 = r11409174 ? r11409181 : r11409186;
return r11409187;
}




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