\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(y \cdot x + z\right)\right) - 1double f(double x, double y, double z) {
double r3915785 = x;
double r3915786 = y;
double r3915787 = z;
double r3915788 = fma(r3915785, r3915786, r3915787);
double r3915789 = 1.0;
double r3915790 = r3915785 * r3915786;
double r3915791 = r3915790 + r3915787;
double r3915792 = r3915789 + r3915791;
double r3915793 = r3915788 - r3915792;
return r3915793;
}
double f(double x, double y, double z) {
double r3915794 = x;
double r3915795 = y;
double r3915796 = z;
double r3915797 = fma(r3915794, r3915795, r3915796);
double r3915798 = r3915795 * r3915794;
double r3915799 = r3915798 + r3915796;
double r3915800 = r3915797 - r3915799;
double r3915801 = 1.0;
double r3915802 = r3915800 - r3915801;
return r3915802;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.8 |
|---|---|
| Target | 0 |
| Herbie | 8.2 |
Initial program 44.8
rmApplied add-log-exp46.2
Applied add-log-exp47.3
Applied sum-log47.3
Applied add-log-exp47.3
Applied sum-log47.3
Applied add-log-exp47.3
Applied diff-log47.3
Simplified34.3
rmApplied associate--r+13.6
rmApplied exp-diff13.6
Applied log-div13.6
Simplified8.2
Simplified8.2
Final simplification8.2
herbie shell --seed 2019200
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))