\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(\frac{1}{z + x \cdot y} \cdot \left(z + x \cdot y\right)\right) \cdot \left(z + x \cdot y\right)\right)double f(double x, double y, double z) {
double r3585326 = x;
double r3585327 = y;
double r3585328 = z;
double r3585329 = fma(r3585326, r3585327, r3585328);
double r3585330 = 1.0;
double r3585331 = r3585326 * r3585327;
double r3585332 = r3585331 + r3585328;
double r3585333 = r3585330 + r3585332;
double r3585334 = r3585329 - r3585333;
return r3585334;
}
double f(double x, double y, double z) {
double r3585335 = x;
double r3585336 = y;
double r3585337 = z;
double r3585338 = fma(r3585335, r3585336, r3585337);
double r3585339 = 1.0;
double r3585340 = 1.0;
double r3585341 = r3585335 * r3585336;
double r3585342 = r3585337 + r3585341;
double r3585343 = r3585340 / r3585342;
double r3585344 = r3585343 * r3585342;
double r3585345 = r3585344 * r3585342;
double r3585346 = r3585339 + r3585345;
double r3585347 = r3585338 - r3585346;
return r3585347;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.0 |
|---|---|
| Target | 0 |
| Herbie | 45.1 |
Initial program 45.0
rmApplied flip-+45.7
Simplified45.7
rmApplied flip--49.6
Applied associate-/r/49.6
Simplified45.1
Final simplification45.1
herbie shell --seed 2019179
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))