Average Error: 0.1 → 0.0
Time: 7.2s
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 r235102 = x;
        double r235103 = y;
        double r235104 = r235102 * r235103;
        double r235105 = z;
        double r235106 = t;
        double r235107 = r235105 * r235106;
        double r235108 = 16.0;
        double r235109 = r235107 / r235108;
        double r235110 = r235104 + r235109;
        double r235111 = a;
        double r235112 = b;
        double r235113 = r235111 * r235112;
        double r235114 = 4.0;
        double r235115 = r235113 / r235114;
        double r235116 = r235110 - r235115;
        double r235117 = c;
        double r235118 = r235116 + r235117;
        return r235118;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r235119 = z;
        double r235120 = 16.0;
        double r235121 = r235119 / r235120;
        double r235122 = t;
        double r235123 = x;
        double r235124 = y;
        double r235125 = a;
        double r235126 = 4.0;
        double r235127 = r235125 / r235126;
        double r235128 = b;
        double r235129 = -r235128;
        double r235130 = c;
        double r235131 = fma(r235127, r235129, r235130);
        double r235132 = fma(r235123, r235124, r235131);
        double r235133 = fma(r235121, r235122, r235132);
        return r235133;
}

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.1

    \[\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 2020046 +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))