Average Error: 0.1 → 0.1
Time: 14.5s
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 r11707995 = x;
        double r11707996 = 3.0;
        double r11707997 = 8.0;
        double r11707998 = r11707996 / r11707997;
        double r11707999 = y;
        double r11708000 = r11707998 * r11707999;
        double r11708001 = r11707995 - r11708000;
        return r11708001;
}

double f(double x, double y) {
        double r11708002 = y;
        double r11708003 = -r11708002;
        double r11708004 = 3.0;
        double r11708005 = 8.0;
        double r11708006 = r11708004 / r11708005;
        double r11708007 = r11708002 * r11708006;
        double r11708008 = fma(r11708003, r11708006, r11708007);
        double r11708009 = 1.0;
        double r11708010 = x;
        double r11708011 = -r11708007;
        double r11708012 = fma(r11708009, r11708010, r11708011);
        double r11708013 = r11708008 + r11708012;
        return r11708013;
}

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