\frac{x \cdot \left(y + z\right)}{z}\mathsf{fma}\left(x, \frac{y}{z}, x\right)double f(double x, double y, double z) {
double r23169607 = x;
double r23169608 = y;
double r23169609 = z;
double r23169610 = r23169608 + r23169609;
double r23169611 = r23169607 * r23169610;
double r23169612 = r23169611 / r23169609;
return r23169612;
}
double f(double x, double y, double z) {
double r23169613 = x;
double r23169614 = y;
double r23169615 = z;
double r23169616 = r23169614 / r23169615;
double r23169617 = fma(r23169613, r23169616, r23169613);
return r23169617;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 11.6 |
|---|---|
| Target | 3.1 |
| Herbie | 3.4 |
Initial program 11.6
Simplified4.8
rmApplied fma-udef4.8
rmApplied associate-*r/4.5
rmApplied *-un-lft-identity4.5
Applied *-un-lft-identity4.5
Applied distribute-lft-out4.5
Simplified3.4
Final simplification3.4
herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z)
:name "Numeric.SpecFunctions:choose from math-functions-0.1.5.2"
:herbie-target
(/ x (/ z (+ y z)))
(/ (* x (+ y z)) z))