Average Error: 0.1 → 0.0
Time: 1.4s
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 r180875 = x;
        double r180876 = y;
        double r180877 = r180875 * r180876;
        double r180878 = z;
        double r180879 = t;
        double r180880 = r180878 * r180879;
        double r180881 = 16.0;
        double r180882 = r180880 / r180881;
        double r180883 = r180877 + r180882;
        double r180884 = a;
        double r180885 = b;
        double r180886 = r180884 * r180885;
        double r180887 = 4.0;
        double r180888 = r180886 / r180887;
        double r180889 = r180883 - r180888;
        double r180890 = c;
        double r180891 = r180889 + r180890;
        return r180891;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r180892 = z;
        double r180893 = t;
        double r180894 = 16.0;
        double r180895 = r180893 / r180894;
        double r180896 = y;
        double r180897 = x;
        double r180898 = a;
        double r180899 = 4.0;
        double r180900 = r180898 / r180899;
        double r180901 = -r180900;
        double r180902 = b;
        double r180903 = c;
        double r180904 = fma(r180901, r180902, r180903);
        double r180905 = fma(r180896, r180897, r180904);
        double r180906 = fma(r180892, r180895, r180905);
        return r180906;
}

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 2020060 +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))