Average Error: 0.3 → 0.3
Time: 10.5s
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 r5226543 = d1;
        double r5226544 = d2;
        double r5226545 = r5226543 * r5226544;
        double r5226546 = d3;
        double r5226547 = 5.0;
        double r5226548 = /* ERROR: no posit support in C */;
        double r5226549 = r5226546 + r5226548;
        double r5226550 = r5226549 * r5226543;
        double r5226551 = r5226545 + r5226550;
        double r5226552 = 32.0;
        double r5226553 = /* ERROR: no posit support in C */;
        double r5226554 = r5226543 * r5226553;
        double r5226555 = r5226551 + r5226554;
        return r5226555;
}

double f(double d1, double d2, double d3) {
        double r5226556 = d1;
        double r5226557 = d2;
        double r5226558 = r5226556 * r5226557;
        double r5226559 = d3;
        double r5226560 = 5.0;
        double r5226561 = r5226559 + r5226560;
        double r5226562 = r5226561 * r5226556;
        double r5226563 = r5226558 + r5226562;
        double r5226564 = 32.0;
        double r5226565 = r5226556 * r5226564;
        double r5226566 = r5226563 + r5226565;
        return r5226566;
}

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