\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)\mathsf{fma}\left(\frac{-2}{3}, {\left(\frac{\varepsilon}{1}\right)}^{3}, -\mathsf{fma}\left(\frac{2}{5}, \frac{{\varepsilon}^{5}}{{1}^{5}}, 2 \cdot \varepsilon\right)\right)double f(double eps) {
double r45560 = 1.0;
double r45561 = eps;
double r45562 = r45560 - r45561;
double r45563 = r45560 + r45561;
double r45564 = r45562 / r45563;
double r45565 = log(r45564);
return r45565;
}
double f(double eps) {
double r45566 = -0.6666666666666666;
double r45567 = eps;
double r45568 = 1.0;
double r45569 = r45567 / r45568;
double r45570 = 3.0;
double r45571 = pow(r45569, r45570);
double r45572 = 0.4;
double r45573 = 5.0;
double r45574 = pow(r45567, r45573);
double r45575 = pow(r45568, r45573);
double r45576 = r45574 / r45575;
double r45577 = 2.0;
double r45578 = r45577 * r45567;
double r45579 = fma(r45572, r45576, r45578);
double r45580 = -r45579;
double r45581 = fma(r45566, r45571, r45580);
return r45581;
}




Bits error versus eps
| Original | 58.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.2 |
Initial program 58.5
rmApplied log-div58.5
Simplified58.5
Taylor expanded around 0 0.2
Simplified0.2
Final simplification0.2
herbie shell --seed 2019347 +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))))