Average Error: 44.7 → 44.9
Time: 26.6s
Precision: 64
\[\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}}\]
\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;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original44.7
Target0
Herbie44.9
\[-1\]

Derivation

  1. Initial program 44.7

    \[\mathsf{fma}\left(x, y, z\right) - \left(1 + \left(x \cdot y + z\right)\right)\]
  2. Using strategy rm
  3. Applied flip-+45.3

    \[\leadsto \mathsf{fma}\left(x, y, z\right) - \left(1 + \color{blue}{\frac{\left(x \cdot y\right) \cdot \left(x \cdot y\right) - z \cdot z}{x \cdot y - z}}\right)\]
  4. Using strategy rm
  5. Applied div-sub45.3

    \[\leadsto \mathsf{fma}\left(x, y, z\right) - \left(1 + \color{blue}{\left(\frac{\left(x \cdot y\right) \cdot \left(x \cdot y\right)}{x \cdot y - z} - \frac{z \cdot z}{x \cdot y - z}\right)}\right)\]
  6. Applied associate-+r-45.3

    \[\leadsto \mathsf{fma}\left(x, y, z\right) - \color{blue}{\left(\left(1 + \frac{\left(x \cdot y\right) \cdot \left(x \cdot y\right)}{x \cdot y - z}\right) - \frac{z \cdot z}{x \cdot y - z}\right)}\]
  7. Applied associate--r-45.3

    \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x, y, z\right) - \left(1 + \frac{\left(x \cdot y\right) \cdot \left(x \cdot y\right)}{x \cdot y - z}\right)\right) + \frac{z \cdot z}{x \cdot y - z}}\]
  8. Taylor expanded around inf 45.1

    \[\leadsto \color{blue}{\left(\mathsf{fma}\left(x, y, z\right) - \left(1 + x \cdot y\right)\right)} + \frac{z \cdot z}{x \cdot y - z}\]
  9. Using strategy rm
  10. Applied add-cube-cbrt45.3

    \[\leadsto \left(\mathsf{fma}\left(x, y, z\right) - \left(1 + x \cdot y\right)\right) + \frac{z \cdot z}{\color{blue}{\left(\sqrt[3]{x \cdot y - z} \cdot \sqrt[3]{x \cdot y - z}\right) \cdot \sqrt[3]{x \cdot y - z}}}\]
  11. Applied times-frac44.9

    \[\leadsto \left(\mathsf{fma}\left(x, y, z\right) - \left(1 + x \cdot y\right)\right) + \color{blue}{\frac{z}{\sqrt[3]{x \cdot y - z} \cdot \sqrt[3]{x \cdot y - z}} \cdot \frac{z}{\sqrt[3]{x \cdot y - z}}}\]
  12. Final simplification44.9

    \[\leadsto \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}}\]

Reproduce

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))))