Average Error: 0.0 → 0.0
Time: 38.8s
Precision: 64
\[\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t\]
\[\left(\mathsf{fma}\left(\frac{-z}{2.0}, y, y \cdot \frac{z}{2.0}\right) + t\right) + \mathsf{fma}\left(\frac{1.0}{8.0}, x, \frac{z}{2.0} \cdot \left(-y\right)\right)\]
\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t
\left(\mathsf{fma}\left(\frac{-z}{2.0}, y, y \cdot \frac{z}{2.0}\right) + t\right) + \mathsf{fma}\left(\frac{1.0}{8.0}, x, \frac{z}{2.0} \cdot \left(-y\right)\right)
double f(double x, double y, double z, double t) {
        double r26616668 = 1.0;
        double r26616669 = 8.0;
        double r26616670 = r26616668 / r26616669;
        double r26616671 = x;
        double r26616672 = r26616670 * r26616671;
        double r26616673 = y;
        double r26616674 = z;
        double r26616675 = r26616673 * r26616674;
        double r26616676 = 2.0;
        double r26616677 = r26616675 / r26616676;
        double r26616678 = r26616672 - r26616677;
        double r26616679 = t;
        double r26616680 = r26616678 + r26616679;
        return r26616680;
}

double f(double x, double y, double z, double t) {
        double r26616681 = z;
        double r26616682 = -r26616681;
        double r26616683 = 2.0;
        double r26616684 = r26616682 / r26616683;
        double r26616685 = y;
        double r26616686 = r26616681 / r26616683;
        double r26616687 = r26616685 * r26616686;
        double r26616688 = fma(r26616684, r26616685, r26616687);
        double r26616689 = t;
        double r26616690 = r26616688 + r26616689;
        double r26616691 = 1.0;
        double r26616692 = 8.0;
        double r26616693 = r26616691 / r26616692;
        double r26616694 = x;
        double r26616695 = -r26616685;
        double r26616696 = r26616686 * r26616695;
        double r26616697 = fma(r26616693, r26616694, r26616696);
        double r26616698 = r26616690 + r26616697;
        return r26616698;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original0.0
Target0.0
Herbie0.0
\[\left(\frac{x}{8.0} + t\right) - \frac{z}{2.0} \cdot y\]

Derivation

  1. Initial program 0.0

    \[\left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{2.0}\right) + t\]
  2. Using strategy rm
  3. Applied *-un-lft-identity0.0

    \[\leadsto \left(\frac{1.0}{8.0} \cdot x - \frac{y \cdot z}{\color{blue}{1 \cdot 2.0}}\right) + t\]
  4. Applied times-frac0.0

    \[\leadsto \left(\frac{1.0}{8.0} \cdot x - \color{blue}{\frac{y}{1} \cdot \frac{z}{2.0}}\right) + t\]
  5. Applied prod-diff0.0

    \[\leadsto \color{blue}{\left(\mathsf{fma}\left(\frac{1.0}{8.0}, x, -\frac{z}{2.0} \cdot \frac{y}{1}\right) + \mathsf{fma}\left(-\frac{z}{2.0}, \frac{y}{1}, \frac{z}{2.0} \cdot \frac{y}{1}\right)\right)} + t\]
  6. Applied associate-+l+0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{1.0}{8.0}, x, -\frac{z}{2.0} \cdot \frac{y}{1}\right) + \left(\mathsf{fma}\left(-\frac{z}{2.0}, \frac{y}{1}, \frac{z}{2.0} \cdot \frac{y}{1}\right) + t\right)}\]
  7. Final simplification0.0

    \[\leadsto \left(\mathsf{fma}\left(\frac{-z}{2.0}, y, y \cdot \frac{z}{2.0}\right) + t\right) + \mathsf{fma}\left(\frac{1.0}{8.0}, x, \frac{z}{2.0} \cdot \left(-y\right)\right)\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, B"

  :herbie-target
  (- (+ (/ x 8.0) t) (* (/ z 2.0) y))

  (+ (- (* (/ 1.0 8.0) x) (/ (* y z) 2.0)) t))