\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)2 \cdot \left(\varepsilon \cdot \varepsilon - \mathsf{fma}\left(\frac{\varepsilon}{1}, \frac{\varepsilon}{1}, \varepsilon\right)\right) + \log 1double f(double eps) {
double r106616 = 1.0;
double r106617 = eps;
double r106618 = r106616 - r106617;
double r106619 = r106616 + r106617;
double r106620 = r106618 / r106619;
double r106621 = log(r106620);
return r106621;
}
double f(double eps) {
double r106622 = 2.0;
double r106623 = eps;
double r106624 = r106623 * r106623;
double r106625 = 1.0;
double r106626 = r106623 / r106625;
double r106627 = fma(r106626, r106626, r106623);
double r106628 = r106624 - r106627;
double r106629 = r106622 * r106628;
double r106630 = log(r106625);
double r106631 = r106629 + r106630;
return r106631;
}




Bits error versus eps
| Original | 58.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
Initial program 58.6
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.6
herbie shell --seed 2020047 +o rules:numerics
(FPCore (eps)
:name "logq (problem 3.4.3)"
:precision binary64
:herbie-target
(* -2 (+ (+ eps (/ (pow eps 3) 3)) (/ (pow eps 5) 5)))
(log (/ (- 1 eps) (+ 1 eps))))