Average Error: 0.1 → 0.1
Time: 16.1s
Precision: 64
\[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
\[\mathsf{fma}\left(t, \frac{z}{16}, \mathsf{fma}\left(x, y, c\right) - \frac{a \cdot b}{4}\right)\]
\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c
\mathsf{fma}\left(t, \frac{z}{16}, \mathsf{fma}\left(x, y, c\right) - \frac{a \cdot b}{4}\right)
double f(double x, double y, double z, double t, double a, double b, double c) {
        double r27916082 = x;
        double r27916083 = y;
        double r27916084 = r27916082 * r27916083;
        double r27916085 = z;
        double r27916086 = t;
        double r27916087 = r27916085 * r27916086;
        double r27916088 = 16.0;
        double r27916089 = r27916087 / r27916088;
        double r27916090 = r27916084 + r27916089;
        double r27916091 = a;
        double r27916092 = b;
        double r27916093 = r27916091 * r27916092;
        double r27916094 = 4.0;
        double r27916095 = r27916093 / r27916094;
        double r27916096 = r27916090 - r27916095;
        double r27916097 = c;
        double r27916098 = r27916096 + r27916097;
        return r27916098;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r27916099 = t;
        double r27916100 = z;
        double r27916101 = 16.0;
        double r27916102 = r27916100 / r27916101;
        double r27916103 = x;
        double r27916104 = y;
        double r27916105 = c;
        double r27916106 = fma(r27916103, r27916104, r27916105);
        double r27916107 = a;
        double r27916108 = b;
        double r27916109 = r27916107 * r27916108;
        double r27916110 = 4.0;
        double r27916111 = r27916109 / r27916110;
        double r27916112 = r27916106 - r27916111;
        double r27916113 = fma(r27916099, r27916102, r27916112);
        return r27916113;
}

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

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

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

Reproduce

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