Average Error: 0.2 → 0.0
Time: 15.5s
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, c - 0.25 \cdot \left(b \cdot a\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, c - 0.25 \cdot \left(b \cdot a\right)\right)\right)
double f(double x, double y, double z, double t, double a, double b, double c) {
        double r8045449 = x;
        double r8045450 = y;
        double r8045451 = r8045449 * r8045450;
        double r8045452 = z;
        double r8045453 = t;
        double r8045454 = r8045452 * r8045453;
        double r8045455 = 16.0;
        double r8045456 = r8045454 / r8045455;
        double r8045457 = r8045451 + r8045456;
        double r8045458 = a;
        double r8045459 = b;
        double r8045460 = r8045458 * r8045459;
        double r8045461 = 4.0;
        double r8045462 = r8045460 / r8045461;
        double r8045463 = r8045457 - r8045462;
        double r8045464 = c;
        double r8045465 = r8045463 + r8045464;
        return r8045465;
}

double f(double x, double y, double z, double t, double a, double b, double c) {
        double r8045466 = t;
        double r8045467 = z;
        double r8045468 = 16.0;
        double r8045469 = r8045467 / r8045468;
        double r8045470 = x;
        double r8045471 = y;
        double r8045472 = c;
        double r8045473 = 0.25;
        double r8045474 = b;
        double r8045475 = a;
        double r8045476 = r8045474 * r8045475;
        double r8045477 = r8045473 * r8045476;
        double r8045478 = r8045472 - r8045477;
        double r8045479 = fma(r8045470, r8045471, r8045478);
        double r8045480 = fma(r8045466, r8045469, r8045479);
        return r8045480;
}

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.2

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(t, \frac{z}{16}, \mathsf{fma}\left(x, y, c - \frac{a}{\frac{4}{b}}\right)\right)}\]
  3. Taylor expanded around 0 0.0

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

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

Reproduce

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