\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 r81060 = 1.0;
double r81061 = eps;
double r81062 = r81060 - r81061;
double r81063 = r81060 + r81061;
double r81064 = r81062 / r81063;
double r81065 = log(r81064);
return r81065;
}
double f(double eps) {
double r81066 = 2.0;
double r81067 = eps;
double r81068 = 2.0;
double r81069 = pow(r81067, r81068);
double r81070 = 1.0;
double r81071 = r81067 / r81070;
double r81072 = fma(r81071, r81071, r81067);
double r81073 = r81069 - r81072;
double r81074 = r81066 * r81073;
double r81075 = log(r81070);
double r81076 = r81074 + r81075;
return r81076;
}




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