Average Error: 0.3 → 0.3
Time: 11.6s
Precision: 64
\[\frac{\left(\frac{\left(d1 \cdot d2\right)}{\left(\left(\frac{d3}{\left(5\right)}\right) \cdot d1\right)}\right)}{\left(d1 \cdot \left(32\right)\right)}\]
\[\left(d1 \cdot d2 + \left(d3 + 5\right) \cdot d1\right) + d1 \cdot 32\]
\frac{\left(\frac{\left(d1 \cdot d2\right)}{\left(\left(\frac{d3}{\left(5\right)}\right) \cdot d1\right)}\right)}{\left(d1 \cdot \left(32\right)\right)}
\left(d1 \cdot d2 + \left(d3 + 5\right) \cdot d1\right) + d1 \cdot 32
double f(double d1, double d2, double d3) {
        double r3009611 = d1;
        double r3009612 = d2;
        double r3009613 = r3009611 * r3009612;
        double r3009614 = d3;
        double r3009615 = 5.0;
        double r3009616 = /* ERROR: no posit support in C */;
        double r3009617 = r3009614 + r3009616;
        double r3009618 = r3009617 * r3009611;
        double r3009619 = r3009613 + r3009618;
        double r3009620 = 32.0;
        double r3009621 = /* ERROR: no posit support in C */;
        double r3009622 = r3009611 * r3009621;
        double r3009623 = r3009619 + r3009622;
        return r3009623;
}

double f(double d1, double d2, double d3) {
        double r3009624 = d1;
        double r3009625 = d2;
        double r3009626 = r3009624 * r3009625;
        double r3009627 = d3;
        double r3009628 = 5.0;
        double r3009629 = r3009627 + r3009628;
        double r3009630 = r3009629 * r3009624;
        double r3009631 = r3009626 + r3009630;
        double r3009632 = 32.0;
        double r3009633 = r3009624 * r3009632;
        double r3009634 = r3009631 + r3009633;
        return r3009634;
}

Error

Bits error versus d1

Bits error versus d2

Bits error versus d3

Derivation

  1. Initial program 0.3

    \[\frac{\left(\frac{\left(d1 \cdot d2\right)}{\left(\left(\frac{d3}{\left(5\right)}\right) \cdot d1\right)}\right)}{\left(d1 \cdot \left(32\right)\right)}\]
  2. Final simplification0.3

    \[\leadsto \left(d1 \cdot d2 + \left(d3 + 5\right) \cdot d1\right) + d1 \cdot 32\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (d1 d2 d3)
  :name "FastMath dist3"
  (+.p16 (+.p16 (*.p16 d1 d2) (*.p16 (+.p16 d3 (real->posit16 5)) d1)) (*.p16 d1 (real->posit16 32))))