Average Error: 0.1 → 0.0
Time: 3.1s
Precision: 64
\[\left(\left(x \cdot y + \frac{z \cdot t}{16}\right) - \frac{a \cdot b}{4}\right) + c\]
\[\mathsf{fma}\left(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \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(\frac{z}{16}, t, \mathsf{fma}\left(x, y, \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 r134655 = x;
        double r134656 = y;
        double r134657 = r134655 * r134656;
        double r134658 = z;
        double r134659 = t;
        double r134660 = r134658 * r134659;
        double r134661 = 16.0;
        double r134662 = r134660 / r134661;
        double r134663 = r134657 + r134662;
        double r134664 = a;
        double r134665 = b;
        double r134666 = r134664 * r134665;
        double r134667 = 4.0;
        double r134668 = r134666 / r134667;
        double r134669 = r134663 - r134668;
        double r134670 = c;
        double r134671 = r134669 + r134670;
        return r134671;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r134672 = z;
        double r134673 = 16.0;
        double r134674 = r134672 / r134673;
        double r134675 = t;
        double r134676 = x;
        double r134677 = y;
        double r134678 = a;
        double r134679 = 4.0;
        double r134680 = r134678 / r134679;
        double r134681 = b;
        double r134682 = -r134681;
        double r134683 = c;
        double r134684 = fma(r134680, r134682, r134683);
        double r134685 = fma(r134676, r134677, r134684);
        double r134686 = fma(r134674, r134675, r134685);
        return r134686;
}

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

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

Reproduce

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