\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)\mathsf{fma}\left(-2, \mathsf{fma}\left(\frac{\varepsilon}{1}, \frac{\varepsilon}{1}, \varepsilon\right), \mathsf{fma}\left(2, {\varepsilon}^{2}, \log 1\right)\right)double f(double eps) {
double r77629 = 1.0;
double r77630 = eps;
double r77631 = r77629 - r77630;
double r77632 = r77629 + r77630;
double r77633 = r77631 / r77632;
double r77634 = log(r77633);
return r77634;
}
double f(double eps) {
double r77635 = 2.0;
double r77636 = -r77635;
double r77637 = eps;
double r77638 = 1.0;
double r77639 = r77637 / r77638;
double r77640 = fma(r77639, r77639, r77637);
double r77641 = 2.0;
double r77642 = pow(r77637, r77641);
double r77643 = log(r77638);
double r77644 = fma(r77635, r77642, r77643);
double r77645 = fma(r77636, r77640, r77644);
return r77645;
}




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