\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\mathsf{fma}\left(x, y, z\right) - \left(1 + \frac{x \cdot y}{\frac{x \cdot y - z}{x \cdot y}}\right)\right) + \frac{z}{\frac{x \cdot y - z}{z}}double f(double x, double y, double z) {
double r96496 = x;
double r96497 = y;
double r96498 = z;
double r96499 = fma(r96496, r96497, r96498);
double r96500 = 1.0;
double r96501 = r96496 * r96497;
double r96502 = r96501 + r96498;
double r96503 = r96500 + r96502;
double r96504 = r96499 - r96503;
return r96504;
}
double f(double x, double y, double z) {
double r96505 = x;
double r96506 = y;
double r96507 = z;
double r96508 = fma(r96505, r96506, r96507);
double r96509 = 1.0;
double r96510 = r96505 * r96506;
double r96511 = r96510 - r96507;
double r96512 = r96511 / r96510;
double r96513 = r96510 / r96512;
double r96514 = r96509 + r96513;
double r96515 = r96508 - r96514;
double r96516 = r96511 / r96507;
double r96517 = r96507 / r96516;
double r96518 = r96515 + r96517;
return r96518;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.2 |
|---|---|
| Target | 0 |
| Herbie | 45.1 |
Initial program 45.2
rmApplied flip-+45.9
rmApplied div-sub45.9
Applied associate-+r-45.9
Applied associate--r-45.9
rmApplied associate-/l*45.6
rmApplied associate-/l*45.1
Final simplification45.1
herbie shell --seed 2020001
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))