Average Error: 0.1 → 0.1
Time: 15.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 r9136590 = x;
        double r9136591 = 3.0;
        double r9136592 = 8.0;
        double r9136593 = r9136591 / r9136592;
        double r9136594 = y;
        double r9136595 = r9136593 * r9136594;
        double r9136596 = r9136590 - r9136595;
        return r9136596;
}

double f(double x, double y) {
        double r9136597 = y;
        double r9136598 = -r9136597;
        double r9136599 = 3.0;
        double r9136600 = 8.0;
        double r9136601 = r9136599 / r9136600;
        double r9136602 = r9136597 * r9136601;
        double r9136603 = fma(r9136598, r9136601, r9136602);
        double r9136604 = 1.0;
        double r9136605 = x;
        double r9136606 = -r9136602;
        double r9136607 = fma(r9136604, r9136605, r9136606);
        double r9136608 = r9136603 + r9136607;
        return r9136608;
}

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 2019164 +o rules:numerics
(FPCore (x y)
  :name "Diagrams.Solve.Polynomial:quartForm  from diagrams-solve-0.1, A"
  (- x (* (/ 3.0 8.0) y)))