\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\left(\mathsf{fma}\left(x, y, z\right) - \left(1 + x \cdot y\right)\right) + \frac{z}{\sqrt[3]{x \cdot y - z} \cdot \sqrt[3]{x \cdot y - z}} \cdot \frac{z}{\sqrt[3]{x \cdot y - z}}double f(double x, double y, double z) {
double r8519862 = x;
double r8519863 = y;
double r8519864 = z;
double r8519865 = fma(r8519862, r8519863, r8519864);
double r8519866 = 1.0;
double r8519867 = r8519862 * r8519863;
double r8519868 = r8519867 + r8519864;
double r8519869 = r8519866 + r8519868;
double r8519870 = r8519865 - r8519869;
return r8519870;
}
double f(double x, double y, double z) {
double r8519871 = x;
double r8519872 = y;
double r8519873 = z;
double r8519874 = fma(r8519871, r8519872, r8519873);
double r8519875 = 1.0;
double r8519876 = r8519871 * r8519872;
double r8519877 = r8519875 + r8519876;
double r8519878 = r8519874 - r8519877;
double r8519879 = r8519876 - r8519873;
double r8519880 = cbrt(r8519879);
double r8519881 = r8519880 * r8519880;
double r8519882 = r8519873 / r8519881;
double r8519883 = r8519873 / r8519880;
double r8519884 = r8519882 * r8519883;
double r8519885 = r8519878 + r8519884;
return r8519885;
}




Bits error versus x




Bits error versus y




Bits error versus z
| Original | 44.7 |
|---|---|
| Target | 0 |
| Herbie | 44.9 |
Initial program 44.7
rmApplied flip-+45.3
rmApplied div-sub45.3
Applied associate-+r-45.3
Applied associate--r-45.3
Taylor expanded around inf 45.1
rmApplied add-cube-cbrt45.3
Applied times-frac44.9
Final simplification44.9
herbie shell --seed 2019173
(FPCore (x y z)
:name "simple fma test"
:herbie-target
-1.0
(- (fma x y z) (+ 1.0 (+ (* x y) z))))