\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 r112204 = 1.0;
double r112205 = eps;
double r112206 = r112204 - r112205;
double r112207 = r112204 + r112205;
double r112208 = r112206 / r112207;
double r112209 = log(r112208);
return r112209;
}
double f(double eps) {
double r112210 = 2.0;
double r112211 = -r112210;
double r112212 = eps;
double r112213 = 1.0;
double r112214 = r112212 / r112213;
double r112215 = fma(r112214, r112214, r112212);
double r112216 = 2.0;
double r112217 = pow(r112212, r112216);
double r112218 = log(r112213);
double r112219 = fma(r112210, r112217, r112218);
double r112220 = fma(r112211, r112215, r112219);
return r112220;
}




Bits error versus eps
| Original | 58.9 |
|---|---|
| Target | 0.1 |
| Herbie | 0.5 |
Initial program 58.9
Taylor expanded around 0 0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2019199 +o rules:numerics
(FPCore (eps)
:name "logq (problem 3.4.3)"
:herbie-target
(* -2.0 (+ (+ eps (/ (pow eps 3.0) 3.0)) (/ (pow eps 5.0) 5.0)))
(log (/ (- 1.0 eps) (+ 1.0 eps))))