\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 r55154 = x;
double r55155 = y;
double r55156 = z;
double r55157 = fma(r55154, r55155, r55156);
double r55158 = 1.0;
double r55159 = r55154 * r55155;
double r55160 = r55159 + r55156;
double r55161 = r55158 + r55160;
double r55162 = r55157 - r55161;
return r55162;
}
double f(double x, double y, double z) {
double r55163 = x;
double r55164 = y;
double r55165 = z;
double r55166 = fma(r55163, r55164, r55165);
double r55167 = 1.0;
double r55168 = r55166 - r55167;
double r55169 = r55163 * r55164;
double r55170 = r55168 - r55169;
double r55171 = r55170 - r55165;
double r55172 = cbrt(r55171);
double r55173 = r55172 * r55172;
double r55174 = r55173 * r55172;
return r55174;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 45.4 |
|---|---|
| Target | 0 |
| Herbie | 45.3 |
Initial program 45.4
rmApplied associate--r+45.4
rmApplied associate--r+45.3
rmApplied add-cube-cbrt45.3
Final simplification45.3
herbie shell --seed 2019199
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))