\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - zdouble f(double x, double y, double z) {
double r60419 = x;
double r60420 = y;
double r60421 = z;
double r60422 = fma(r60419, r60420, r60421);
double r60423 = 1.0;
double r60424 = r60419 * r60420;
double r60425 = r60424 + r60421;
double r60426 = r60423 + r60425;
double r60427 = r60422 - r60426;
return r60427;
}
double f(double x, double y, double z) {
double r60428 = x;
double r60429 = y;
double r60430 = z;
double r60431 = fma(r60428, r60429, r60430);
double r60432 = 1.0;
double r60433 = r60431 - r60432;
double r60434 = r60428 * r60429;
double r60435 = r60433 - r60434;
double r60436 = r60435 - r60430;
return r60436;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.3 |
|---|---|
| Target | 0 |
| Herbie | 45.2 |
Initial program 45.3
rmApplied associate--r+45.3
rmApplied associate--r+45.2
rmApplied add-cube-cbrt45.2
rmApplied add-cube-cbrt45.2
Final simplification45.2
herbie shell --seed 2019308
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))