Average Error: 0.5 → 0.4
Time: 15.9s
Precision: 64
\[\left(\frac{\left(\left(d1 \cdot d2\right) - \left(d1 \cdot d3\right)\right)}{\left(d4 \cdot d1\right)}\right) - \left(d1 \cdot d1\right)\]
\[\left(\mathsf{qma}\left(\left(\left(\left(d4 - \left(d1 + d3\right)\right) \cdot d1\right)\right), d2, d1\right)\right)\]
\left(\frac{\left(\left(d1 \cdot d2\right) - \left(d1 \cdot d3\right)\right)}{\left(d4 \cdot d1\right)}\right) - \left(d1 \cdot d1\right)
\left(\mathsf{qma}\left(\left(\left(\left(d4 - \left(d1 + d3\right)\right) \cdot d1\right)\right), d2, d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r1503134 = d1;
        double r1503135 = d2;
        double r1503136 = r1503134 * r1503135;
        double r1503137 = d3;
        double r1503138 = r1503134 * r1503137;
        double r1503139 = r1503136 - r1503138;
        double r1503140 = d4;
        double r1503141 = r1503140 * r1503134;
        double r1503142 = r1503139 + r1503141;
        double r1503143 = r1503134 * r1503134;
        double r1503144 = r1503142 - r1503143;
        return r1503144;
}

double f(double d1, double d2, double d3, double d4) {
        double r1503145 = d4;
        double r1503146 = d1;
        double r1503147 = d3;
        double r1503148 = r1503146 + r1503147;
        double r1503149 = r1503145 - r1503148;
        double r1503150 = r1503149 * r1503146;
        double r1503151 = /*Error: no posit support in C */;
        double r1503152 = d2;
        double r1503153 = /*Error: no posit support in C */;
        double r1503154 = /*Error: no posit support in C */;
        return r1503154;
}

Error

Bits error versus d1

Bits error versus d2

Bits error versus d3

Bits error versus d4

Derivation

  1. Initial program 0.5

    \[\left(\frac{\left(\left(d1 \cdot d2\right) - \left(d1 \cdot d3\right)\right)}{\left(d4 \cdot d1\right)}\right) - \left(d1 \cdot d1\right)\]
  2. Simplified0.4

    \[\leadsto \color{blue}{d1 \cdot \left(\frac{\left(d4 - \left(\frac{d1}{d3}\right)\right)}{d2}\right)}\]
  3. Using strategy rm
  4. Applied distribute-rgt-in0.4

    \[\leadsto \color{blue}{\frac{\left(\left(d4 - \left(\frac{d1}{d3}\right)\right) \cdot d1\right)}{\left(d2 \cdot d1\right)}}\]
  5. Using strategy rm
  6. Applied introduce-quire0.4

    \[\leadsto \frac{\color{blue}{\left(\left(\left(\left(d4 - \left(\frac{d1}{d3}\right)\right) \cdot d1\right)\right)\right)}}{\left(d2 \cdot d1\right)}\]
  7. Applied insert-quire-fdp-add0.4

    \[\leadsto \color{blue}{\left(\mathsf{qma}\left(\left(\left(\left(d4 - \left(\frac{d1}{d3}\right)\right) \cdot d1\right)\right), d2, d1\right)\right)}\]
  8. Final simplification0.4

    \[\leadsto \left(\mathsf{qma}\left(\left(\left(\left(d4 - \left(d1 + d3\right)\right) \cdot d1\right)\right), d2, d1\right)\right)\]

Reproduce

herbie shell --seed 2019156 +o rules:numerics
(FPCore (d1 d2 d3 d4)
  :name "FastMath dist4"
  (-.p16 (+.p16 (-.p16 (*.p16 d1 d2) (*.p16 d1 d3)) (*.p16 d4 d1)) (*.p16 d1 d1)))