Average Error: 0.1 → 0.0
Time: 19.6s
Precision: 64
\[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
\[\mathsf{fma}\left(y, x, \mathsf{fma}\left(\frac{z}{16}, t, c - \frac{a}{4} \cdot b\right)\right)\]
\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c
\mathsf{fma}\left(y, x, \mathsf{fma}\left(\frac{z}{16}, t, c - \frac{a}{4} \cdot b\right)\right)
double f(double x, double y, double z, double t, double a, double b, double c) {
        double r7846510 = x;
        double r7846511 = y;
        double r7846512 = r7846510 * r7846511;
        double r7846513 = z;
        double r7846514 = t;
        double r7846515 = r7846513 * r7846514;
        double r7846516 = 16.0;
        double r7846517 = r7846515 / r7846516;
        double r7846518 = r7846512 + r7846517;
        double r7846519 = a;
        double r7846520 = b;
        double r7846521 = r7846519 * r7846520;
        double r7846522 = 4.0;
        double r7846523 = r7846521 / r7846522;
        double r7846524 = r7846518 - r7846523;
        double r7846525 = c;
        double r7846526 = r7846524 + r7846525;
        return r7846526;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r7846527 = y;
        double r7846528 = x;
        double r7846529 = z;
        double r7846530 = 16.0;
        double r7846531 = r7846529 / r7846530;
        double r7846532 = t;
        double r7846533 = c;
        double r7846534 = a;
        double r7846535 = 4.0;
        double r7846536 = r7846534 / r7846535;
        double r7846537 = b;
        double r7846538 = r7846536 * r7846537;
        double r7846539 = r7846533 - r7846538;
        double r7846540 = fma(r7846531, r7846532, r7846539);
        double r7846541 = fma(r7846527, r7846528, r7846540);
        return r7846541;
}

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. Using strategy rm
  3. Applied *-un-lft-identity0.1

    \[\leadsto \left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + \color{blue}{1 \cdot c}\]
  4. Applied *-un-lft-identity0.1

    \[\leadsto \color{blue}{1 \cdot \left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right)} + 1 \cdot c\]
  5. Applied distribute-lft-out0.1

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

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

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

Reproduce

herbie shell --seed 2019179 +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))