\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)\left(\left(t \cdot \sqrt{3.9999999999999997 \cdot 10^{-32}}\right) \cdot t\right) \cdot \sqrt{3.9999999999999997 \cdot 10^{-32}}double f(double t) {
double r70466 = 1.0;
double r70467 = t;
double r70468 = 2e-16;
double r70469 = r70467 * r70468;
double r70470 = r70466 + r70469;
double r70471 = r70470 * r70470;
double r70472 = -1.0;
double r70473 = 2.0;
double r70474 = r70473 * r70469;
double r70475 = r70472 - r70474;
double r70476 = r70471 + r70475;
return r70476;
}
double f(double t) {
double r70477 = t;
double r70478 = 3.9999999999999997e-32;
double r70479 = sqrt(r70478);
double r70480 = r70477 * r70479;
double r70481 = r70480 * r70477;
double r70482 = r70481 * r70479;
return r70482;
}




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-sqrt1.0
Applied unpow-prod-down1.0
Applied add-sqr-sqrt1.0
Applied unswap-sqr1.0
Simplified0.7
Simplified0.4
rmApplied associate-*r*0.3
Final simplification0.3
herbie shell --seed 2020027 +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)))))