\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\sqrt[3]{{\left(\left(\mathsf{fma}\left(x, y, z\right) + \left(-\left(z + x \cdot y\right)\right)\right) - 1\right)}^{3}}double f(double x, double y, double z) {
double r66596 = x;
double r66597 = y;
double r66598 = z;
double r66599 = fma(r66596, r66597, r66598);
double r66600 = 1.0;
double r66601 = r66596 * r66597;
double r66602 = r66601 + r66598;
double r66603 = r66600 + r66602;
double r66604 = r66599 - r66603;
return r66604;
}
double f(double x, double y, double z) {
double r66605 = x;
double r66606 = y;
double r66607 = z;
double r66608 = fma(r66605, r66606, r66607);
double r66609 = r66605 * r66606;
double r66610 = r66607 + r66609;
double r66611 = -r66610;
double r66612 = r66608 + r66611;
double r66613 = 1.0;
double r66614 = r66612 - r66613;
double r66615 = 3.0;
double r66616 = pow(r66614, r66615);
double r66617 = cbrt(r66616);
return r66617;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.3 |
|---|---|
| Target | 0 |
| Herbie | 8.4 |
Initial program 45.3
rmApplied add-cbrt-cube45.3
Simplified45.3
rmApplied associate--r+30.9
rmApplied associate--r+15.3
rmApplied sub-neg15.3
Applied associate--l+8.4
Simplified8.4
Final simplification8.4
herbie shell --seed 2020060
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))