\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(z + x \cdot y\right)\right) - 1double f(double x, double y, double z) {
double r7662596 = x;
double r7662597 = y;
double r7662598 = z;
double r7662599 = fma(r7662596, r7662597, r7662598);
double r7662600 = 1.0;
double r7662601 = r7662596 * r7662597;
double r7662602 = r7662601 + r7662598;
double r7662603 = r7662600 + r7662602;
double r7662604 = r7662599 - r7662603;
return r7662604;
}
double f(double x, double y, double z) {
double r7662605 = x;
double r7662606 = y;
double r7662607 = z;
double r7662608 = fma(r7662605, r7662606, r7662607);
double r7662609 = r7662605 * r7662606;
double r7662610 = r7662607 + r7662609;
double r7662611 = r7662608 - r7662610;
double r7662612 = 1.0;
double r7662613 = r7662611 - r7662612;
return r7662613;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.2 |
|---|---|
| Target | 0 |
| Herbie | 8.3 |
Initial program 45.2
rmApplied add-log-exp46.9
Applied add-log-exp47.4
Applied diff-log47.4
Simplified13.6
rmApplied log-div13.6
Simplified8.3
Final simplification8.3
herbie shell --seed 2019120
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))