\log \left(\frac{1 - \varepsilon}{1 + \varepsilon}\right)-\mathsf{fma}\left(2, \varepsilon, \mathsf{fma}\left(0.6666666666666666296592325124947819858789, {\varepsilon}^{3}, 0.4000000000000000222044604925031308084726 \cdot {\varepsilon}^{5}\right)\right)double f(double eps) {
double r56533 = 1.0;
double r56534 = eps;
double r56535 = r56533 - r56534;
double r56536 = r56533 + r56534;
double r56537 = r56535 / r56536;
double r56538 = log(r56537);
return r56538;
}
double f(double eps) {
double r56539 = 2.0;
double r56540 = eps;
double r56541 = 0.6666666666666666;
double r56542 = 3.0;
double r56543 = pow(r56540, r56542);
double r56544 = 0.4;
double r56545 = 5.0;
double r56546 = pow(r56540, r56545);
double r56547 = r56544 * r56546;
double r56548 = fma(r56541, r56543, r56547);
double r56549 = fma(r56539, r56540, r56548);
double r56550 = -r56549;
return r56550;
}




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