Average Error: 0.1 → 0.0
Time: 1.5s
Precision: 64
\[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
\[\mathsf{fma}\left(z, \frac{t}{16}, \mathsf{fma}\left(y, x, \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(z, \frac{t}{16}, \mathsf{fma}\left(y, x, \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 r203660 = x;
        double r203661 = y;
        double r203662 = r203660 * r203661;
        double r203663 = z;
        double r203664 = t;
        double r203665 = r203663 * r203664;
        double r203666 = 16.0;
        double r203667 = r203665 / r203666;
        double r203668 = r203662 + r203667;
        double r203669 = a;
        double r203670 = b;
        double r203671 = r203669 * r203670;
        double r203672 = 4.0;
        double r203673 = r203671 / r203672;
        double r203674 = r203668 - r203673;
        double r203675 = c;
        double r203676 = r203674 + r203675;
        return r203676;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r203677 = z;
        double r203678 = t;
        double r203679 = 16.0;
        double r203680 = r203678 / r203679;
        double r203681 = y;
        double r203682 = x;
        double r203683 = a;
        double r203684 = 4.0;
        double r203685 = r203683 / r203684;
        double r203686 = -r203685;
        double r203687 = b;
        double r203688 = c;
        double r203689 = fma(r203686, r203687, r203688);
        double r203690 = fma(r203681, r203682, r203689);
        double r203691 = fma(r203677, r203680, r203690);
        return r203691;
}

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(z, \frac{t}{16}, \mathsf{fma}\left(y, x, \mathsf{fma}\left(-\frac{a}{4}, b, c\right)\right)\right)}\]
  3. Final simplification0.0

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

Reproduce

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