\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)2 \cdot \left({\varepsilon}^{2} - \mathsf{fma}\left(\frac{\varepsilon}{1}, \frac{\varepsilon}{1}, \varepsilon\right)\right) + \log 1double f(double eps) {
double r84354 = 1.0;
double r84355 = eps;
double r84356 = r84354 - r84355;
double r84357 = r84354 + r84355;
double r84358 = r84356 / r84357;
double r84359 = log(r84358);
return r84359;
}
double f(double eps) {
double r84360 = 2.0;
double r84361 = eps;
double r84362 = 2.0;
double r84363 = pow(r84361, r84362);
double r84364 = 1.0;
double r84365 = r84361 / r84364;
double r84366 = fma(r84365, r84365, r84361);
double r84367 = r84363 - r84366;
double r84368 = r84360 * r84367;
double r84369 = log(r84364);
double r84370 = r84368 + r84369;
return r84370;
}




Bits error versus eps
| Original | 58.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 58.4
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2020049 +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))))