\left(1 + t \cdot 2 \cdot 10^{-16}\right) \cdot \left(1 + t \cdot 2 \cdot 10^{-16}\right) + \left(-1 - 2 \cdot \left(t \cdot 2 \cdot 10^{-16}\right)\right)\sqrt{3.9999999999999997 \cdot 10^{-32}} \cdot \left(\left(\sqrt{3.9999999999999997 \cdot 10^{-32}} \cdot \left|t\right|\right) \cdot \sqrt{{t}^{2}}\right)double f(double t) {
double r91744 = 1.0;
double r91745 = t;
double r91746 = 2e-16;
double r91747 = r91745 * r91746;
double r91748 = r91744 + r91747;
double r91749 = r91748 * r91748;
double r91750 = -1.0;
double r91751 = 2.0;
double r91752 = r91751 * r91747;
double r91753 = r91750 - r91752;
double r91754 = r91749 + r91753;
return r91754;
}
double f(double t) {
double r91755 = 3.9999999999999997e-32;
double r91756 = sqrt(r91755);
double r91757 = t;
double r91758 = fabs(r91757);
double r91759 = r91756 * r91758;
double r91760 = 2.0;
double r91761 = pow(r91757, r91760);
double r91762 = sqrt(r91761);
double r91763 = r91759 * r91762;
double r91764 = r91756 * r91763;
return r91764;
}




Bits error versus t
Results
| Original | 61.8 |
|---|---|
| Target | 50.6 |
| Herbie | 0.3 |
Initial program 61.8
Simplified57.6
Taylor expanded around 0 0.3
rmApplied add-sqr-sqrt0.3
Applied associate-*l*0.3
rmApplied add-sqr-sqrt0.3
Applied associate-*r*0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020064 +o rules:numerics
(FPCore (t)
:name "fma_test1"
:precision binary64
:pre (<= 0.9 t 1.1)
:herbie-target
(fma (+ 1 (* t 2e-16)) (+ 1 (* t 2e-16)) (- -1 (* 2 (* t 2e-16))))
(+ (* (+ 1 (* t 2e-16)) (+ 1 (* t 2e-16))) (- -1 (* 2 (* t 2e-16)))))