\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z} \cdot \sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z}\right) \cdot \sqrt[3]{\left(\left(\mathsf{fma}\left(x, y, z\right) - 1\right) - x \cdot y\right) - z}double f(double x, double y, double z) {
double r42240 = x;
double r42241 = y;
double r42242 = z;
double r42243 = fma(r42240, r42241, r42242);
double r42244 = 1.0;
double r42245 = r42240 * r42241;
double r42246 = r42245 + r42242;
double r42247 = r42244 + r42246;
double r42248 = r42243 - r42247;
return r42248;
}
double f(double x, double y, double z) {
double r42249 = x;
double r42250 = y;
double r42251 = z;
double r42252 = fma(r42249, r42250, r42251);
double r42253 = 1.0;
double r42254 = r42252 - r42253;
double r42255 = r42249 * r42250;
double r42256 = r42254 - r42255;
double r42257 = r42256 - r42251;
double r42258 = cbrt(r42257);
double r42259 = r42258 * r42258;
double r42260 = r42259 * r42258;
return r42260;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.3 |
|---|---|
| Target | 0 |
| Herbie | 44.2 |
Initial program 44.3
rmApplied associate--r+44.3
rmApplied associate--r+44.2
rmApplied add-cube-cbrt44.2
Final simplification44.2
herbie shell --seed 2019208
(FPCore (x y z)
:name "simple fma test"
:precision binary64
:herbie-target
-1
(- (fma x y z) (+ 1 (+ (* x y) z))))