Average Error: 0.1 → 0.1
Time: 14.8s
Precision: 64
\[x - \frac{3.0}{8.0} \cdot y\]
\[\mathsf{fma}\left(-y, \frac{3.0}{8.0}, y \cdot \frac{3.0}{8.0}\right) + \mathsf{fma}\left(1, x, -y \cdot \frac{3.0}{8.0}\right)\]
x - \frac{3.0}{8.0} \cdot y
\mathsf{fma}\left(-y, \frac{3.0}{8.0}, y \cdot \frac{3.0}{8.0}\right) + \mathsf{fma}\left(1, x, -y \cdot \frac{3.0}{8.0}\right)
double f(double x, double y) {
        double r10147888 = x;
        double r10147889 = 3.0;
        double r10147890 = 8.0;
        double r10147891 = r10147889 / r10147890;
        double r10147892 = y;
        double r10147893 = r10147891 * r10147892;
        double r10147894 = r10147888 - r10147893;
        return r10147894;
}

double f(double x, double y) {
        double r10147895 = y;
        double r10147896 = -r10147895;
        double r10147897 = 3.0;
        double r10147898 = 8.0;
        double r10147899 = r10147897 / r10147898;
        double r10147900 = r10147895 * r10147899;
        double r10147901 = fma(r10147896, r10147899, r10147900);
        double r10147902 = 1.0;
        double r10147903 = x;
        double r10147904 = -r10147900;
        double r10147905 = fma(r10147902, r10147903, r10147904);
        double r10147906 = r10147901 + r10147905;
        return r10147906;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Initial program 0.1

    \[x - \frac{3.0}{8.0} \cdot y\]
  2. Using strategy rm
  3. Applied *-un-lft-identity0.1

    \[\leadsto \color{blue}{1 \cdot x} - \frac{3.0}{8.0} \cdot y\]
  4. Applied prod-diff0.1

    \[\leadsto \color{blue}{\mathsf{fma}\left(1, x, -y \cdot \frac{3.0}{8.0}\right) + \mathsf{fma}\left(-y, \frac{3.0}{8.0}, y \cdot \frac{3.0}{8.0}\right)}\]
  5. Final simplification0.1

    \[\leadsto \mathsf{fma}\left(-y, \frac{3.0}{8.0}, y \cdot \frac{3.0}{8.0}\right) + \mathsf{fma}\left(1, x, -y \cdot \frac{3.0}{8.0}\right)\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x y)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, A"
  (- x (* (/ 3.0 8.0) y)))