Average Error: 0.2 → 0.0
Time: 8.5s
Precision: 64
\[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
\[\mathsf{fma}\left(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{a}{4}, -b, c\right)\right)\right)\]
\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c
\mathsf{fma}\left(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{a}{4}, -b, c\right)\right)\right)
double f(double x, double y, double z, double t, double a, double b, double c) {
        double r139902 = x;
        double r139903 = y;
        double r139904 = r139902 * r139903;
        double r139905 = z;
        double r139906 = t;
        double r139907 = r139905 * r139906;
        double r139908 = 16.0;
        double r139909 = r139907 / r139908;
        double r139910 = r139904 + r139909;
        double r139911 = a;
        double r139912 = b;
        double r139913 = r139911 * r139912;
        double r139914 = 4.0;
        double r139915 = r139913 / r139914;
        double r139916 = r139910 - r139915;
        double r139917 = c;
        double r139918 = r139916 + r139917;
        return r139918;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r139919 = z;
        double r139920 = 16.0;
        double r139921 = r139919 / r139920;
        double r139922 = t;
        double r139923 = x;
        double r139924 = y;
        double r139925 = a;
        double r139926 = 4.0;
        double r139927 = r139925 / r139926;
        double r139928 = b;
        double r139929 = -r139928;
        double r139930 = c;
        double r139931 = fma(r139927, r139929, r139930);
        double r139932 = fma(r139923, r139924, r139931);
        double r139933 = fma(r139921, r139922, r139932);
        return r139933;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Initial program 0.2

    \[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{a}{4}, -b, c\right)\right)\right)}\]
  3. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{a}{4}, -b, c\right)\right)\right)\]

Reproduce

herbie shell --seed 2019235 +o rules:numerics
(FPCore (x y z t a b c)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, C"
  :precision binary64
  (+ (- (+ (* x y) (/ (* z t) 16)) (/ (* a b) 4)) c))