\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 r44107 = x;
double r44108 = y;
double r44109 = z;
double r44110 = fma(r44107, r44108, r44109);
double r44111 = 1.0;
double r44112 = r44107 * r44108;
double r44113 = r44112 + r44109;
double r44114 = r44111 + r44113;
double r44115 = r44110 - r44114;
return r44115;
}
double f(double x, double y, double z) {
double r44116 = x;
double r44117 = y;
double r44118 = z;
double r44119 = fma(r44116, r44117, r44118);
double r44120 = 1.0;
double r44121 = r44119 - r44120;
double r44122 = r44116 * r44117;
double r44123 = r44121 - r44122;
double r44124 = r44123 - r44118;
double r44125 = cbrt(r44124);
double r44126 = r44125 * r44125;
double r44127 = r44126 * r44125;
return r44127;
}




Bits error versus x




Bits error versus y




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