\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 r88030 = x;
double r88031 = y;
double r88032 = z;
double r88033 = fma(r88030, r88031, r88032);
double r88034 = 1.0;
double r88035 = r88030 * r88031;
double r88036 = r88035 + r88032;
double r88037 = r88034 + r88036;
double r88038 = r88033 - r88037;
return r88038;
}
double f(double x, double y, double z) {
double r88039 = x;
double r88040 = y;
double r88041 = z;
double r88042 = fma(r88039, r88040, r88041);
double r88043 = 1.0;
double r88044 = r88039 * r88040;
double r88045 = r88044 - r88041;
double r88046 = r88045 / r88044;
double r88047 = r88044 / r88046;
double r88048 = r88043 + r88047;
double r88049 = r88042 - r88048;
double r88050 = r88045 / r88041;
double r88051 = r88041 / r88050;
double r88052 = r88049 + r88051;
return r88052;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.5 |
|---|---|
| Target | 0 |
| Herbie | 44.4 |
Initial program 44.5
rmApplied flip-+45.2
rmApplied div-sub45.2
Applied associate-+r-45.2
Applied associate--r-45.2
rmApplied associate-/l*44.9
rmApplied associate-/l*44.4
Final simplification44.4
herbie shell --seed 2019362
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))