Average Error: 44.5 → 44.4
Time: 5.7s
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 + \frac{x \cdot y}{\frac{x \cdot y - z}{x \cdot y}}\right)\right) + \frac{z}{\frac{x \cdot y - z}{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 + \frac{x \cdot y}{\frac{x \cdot y - z}{x \cdot y}}\right)\right) + \frac{z}{\frac{x \cdot y - z}{z}}
double f(double x, double y, double z) {
        double r88030 = x;
        double r88031 = y;
        double r88032 = z;
        double r88033 = fma(r88030, r88031, r88032);
        double r88034 = 1.0;
        double r88035 = r88030 * r88031;
        double r88036 = r88035 + r88032;
        double r88037 = r88034 + r88036;
        double r88038 = r88033 - r88037;
        return r88038;
}

double f(double x, double y, double z) {
        double r88039 = x;
        double r88040 = y;
        double r88041 = z;
        double r88042 = fma(r88039, r88040, r88041);
        double r88043 = 1.0;
        double r88044 = r88039 * r88040;
        double r88045 = r88044 - r88041;
        double r88046 = r88045 / r88044;
        double r88047 = r88044 / r88046;
        double r88048 = r88043 + r88047;
        double r88049 = r88042 - r88048;
        double r88050 = r88045 / r88041;
        double r88051 = r88041 / r88050;
        double r88052 = r88049 + r88051;
        return r88052;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Target

Original44.5
Target0
Herbie44.4
\[-1\]

Derivation

  1. Initial program 44.5

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

    \[\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.2

    \[\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.2

    \[\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.2

    \[\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. Using strategy rm
  9. Applied associate-/l*44.9

    \[\leadsto \left(\mathsf{fma}\left(x, y, z\right) - \left(1 + \color{blue}{\frac{x \cdot y}{\frac{x \cdot y - z}{x \cdot y}}}\right)\right) + \frac{z \cdot z}{x \cdot y - z}\]
  10. Using strategy rm
  11. Applied associate-/l*44.4

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

    \[\leadsto \left(\mathsf{fma}\left(x, y, z\right) - \left(1 + \frac{x \cdot y}{\frac{x \cdot y - z}{x \cdot y}}\right)\right) + \frac{z}{\frac{x \cdot y - z}{z}}\]

Reproduce

herbie shell --seed 2019362 
(FPCore (x y z)
  :name "simple fma test"
  :precision binary64

  :herbie-target
  -1

  (- (fma x y z) (+ 1 (+ (* x y) z))))