\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)\mathsf{fma}\left(\frac{-2}{3}, \frac{{\varepsilon}^{3}}{{1}^{3}}, -\frac{2}{5} \cdot \frac{{\varepsilon}^{5}}{{1}^{5}}\right) - 2 \cdot \varepsilondouble f(double eps) {
double r70773 = 1.0;
double r70774 = eps;
double r70775 = r70773 - r70774;
double r70776 = r70773 + r70774;
double r70777 = r70775 / r70776;
double r70778 = log(r70777);
return r70778;
}
double f(double eps) {
double r70779 = -0.6666666666666666;
double r70780 = eps;
double r70781 = 3.0;
double r70782 = pow(r70780, r70781);
double r70783 = 1.0;
double r70784 = pow(r70783, r70781);
double r70785 = r70782 / r70784;
double r70786 = 0.4;
double r70787 = 5.0;
double r70788 = pow(r70780, r70787);
double r70789 = pow(r70783, r70787);
double r70790 = r70788 / r70789;
double r70791 = r70786 * r70790;
double r70792 = -r70791;
double r70793 = fma(r70779, r70785, r70792);
double r70794 = 2.0;
double r70795 = r70794 * r70780;
double r70796 = r70793 - r70795;
return r70796;
}




Bits error versus eps
| Original | 58.6 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 58.6
rmApplied log-div58.6
Taylor expanded around 0 0.2
Simplified0.2
rmApplied fma-udef0.2
Applied associate--r+0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2020018 +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))))