\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 + \left(x \cdot y\right) \cdot \frac{x \cdot y}{x \cdot y - z}\right)\right) + \frac{z \cdot z}{x \cdot y - z}double f(double x, double y, double z) {
double r64550 = x;
double r64551 = y;
double r64552 = z;
double r64553 = fma(r64550, r64551, r64552);
double r64554 = 1.0;
double r64555 = r64550 * r64551;
double r64556 = r64555 + r64552;
double r64557 = r64554 + r64556;
double r64558 = r64553 - r64557;
return r64558;
}
double f(double x, double y, double z) {
double r64559 = x;
double r64560 = y;
double r64561 = z;
double r64562 = fma(r64559, r64560, r64561);
double r64563 = 1.0;
double r64564 = r64559 * r64560;
double r64565 = r64564 - r64561;
double r64566 = r64564 / r64565;
double r64567 = r64564 * r64566;
double r64568 = r64563 + r64567;
double r64569 = r64562 - r64568;
double r64570 = r64561 * r64561;
double r64571 = r64570 / r64565;
double r64572 = r64569 + r64571;
return r64572;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.7 |
|---|---|
| Target | 0 |
| Herbie | 46.1 |
Initial program 45.7
rmApplied flip-+46.4
rmApplied div-sub46.5
Applied associate-+r-46.5
Applied associate--r-46.4
rmApplied *-un-lft-identity46.4
Applied times-frac46.1
Simplified46.1
Final simplification46.1
herbie shell --seed 2020018
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))