Average Error: 0.1 → 0.0
Time: 11.4s
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, \mathsf{fma}\left(\frac{-b}{4}, a, 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(t, \frac{z}{16}, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{-b}{4}, a, c\right)\right)\right)
double f(double x, double y, double z, double t, double a, double b, double c) {
        double r162791 = x;
        double r162792 = y;
        double r162793 = r162791 * r162792;
        double r162794 = z;
        double r162795 = t;
        double r162796 = r162794 * r162795;
        double r162797 = 16.0;
        double r162798 = r162796 / r162797;
        double r162799 = r162793 + r162798;
        double r162800 = a;
        double r162801 = b;
        double r162802 = r162800 * r162801;
        double r162803 = 4.0;
        double r162804 = r162802 / r162803;
        double r162805 = r162799 - r162804;
        double r162806 = c;
        double r162807 = r162805 + r162806;
        return r162807;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r162808 = t;
        double r162809 = z;
        double r162810 = 16.0;
        double r162811 = r162809 / r162810;
        double r162812 = x;
        double r162813 = y;
        double r162814 = b;
        double r162815 = -r162814;
        double r162816 = 4.0;
        double r162817 = r162815 / r162816;
        double r162818 = a;
        double r162819 = c;
        double r162820 = fma(r162817, r162818, r162819);
        double r162821 = fma(r162812, r162813, r162820);
        double r162822 = fma(r162808, r162811, r162821);
        return r162822;
}

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

    \[\leadsto \mathsf{fma}\left(t, \frac{z}{16}, \mathsf{fma}\left(x, y, \mathsf{fma}\left(\frac{-b}{4}, a, c\right)\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))