\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 r96171 = 1.0;
double r96172 = eps;
double r96173 = r96171 - r96172;
double r96174 = r96171 + r96172;
double r96175 = r96173 / r96174;
double r96176 = log(r96175);
return r96176;
}
double f(double eps) {
double r96177 = 2.0;
double r96178 = eps;
double r96179 = 2.0;
double r96180 = pow(r96178, r96179);
double r96181 = 1.0;
double r96182 = r96178 / r96181;
double r96183 = fma(r96182, r96182, r96178);
double r96184 = r96180 - r96183;
double r96185 = r96177 * r96184;
double r96186 = log(r96181);
double r96187 = r96185 + r96186;
return r96187;
}




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