\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{1}{\frac{1 - \frac{z}{x \cdot y}}{x \cdot y}}\right)\right) + \frac{z \cdot z}{x \cdot y - z}double f(double x, double y, double z) {
double r82372 = x;
double r82373 = y;
double r82374 = z;
double r82375 = fma(r82372, r82373, r82374);
double r82376 = 1.0;
double r82377 = r82372 * r82373;
double r82378 = r82377 + r82374;
double r82379 = r82376 + r82378;
double r82380 = r82375 - r82379;
return r82380;
}
double f(double x, double y, double z) {
double r82381 = x;
double r82382 = y;
double r82383 = z;
double r82384 = fma(r82381, r82382, r82383);
double r82385 = 1.0;
double r82386 = 1.0;
double r82387 = r82381 * r82382;
double r82388 = r82383 / r82387;
double r82389 = r82386 - r82388;
double r82390 = r82389 / r82387;
double r82391 = r82386 / r82390;
double r82392 = r82385 + r82391;
double r82393 = r82384 - r82392;
double r82394 = r82383 * r82383;
double r82395 = r82387 - r82383;
double r82396 = r82394 / r82395;
double r82397 = r82393 + r82396;
return r82397;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.8 |
|---|---|
| Target | 0 |
| Herbie | 45.2 |
Initial program 44.8
rmApplied flip-+45.5
rmApplied div-sub45.5
Applied associate-+r-45.5
Applied associate--r-45.5
rmApplied clear-num45.5
Simplified45.2
Final simplification45.2
herbie shell --seed 2019235
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))