Average Error: 0.0 → 0.0
Time: 3.1s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[d1 \cdot \left(d2 - d3\right) + \left(d4 \cdot d1 + \left(-d1\right) \cdot d1\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d1 \cdot \left(d2 - d3\right) + \left(d4 \cdot d1 + \left(-d1\right) \cdot d1\right)
double f(double d1, double d2, double d3, double d4) {
        double r147450 = d1;
        double r147451 = d2;
        double r147452 = r147450 * r147451;
        double r147453 = d3;
        double r147454 = r147450 * r147453;
        double r147455 = r147452 - r147454;
        double r147456 = d4;
        double r147457 = r147456 * r147450;
        double r147458 = r147455 + r147457;
        double r147459 = r147450 * r147450;
        double r147460 = r147458 - r147459;
        return r147460;
}

double f(double d1, double d2, double d3, double d4) {
        double r147461 = d1;
        double r147462 = d2;
        double r147463 = d3;
        double r147464 = r147462 - r147463;
        double r147465 = r147461 * r147464;
        double r147466 = d4;
        double r147467 = r147466 * r147461;
        double r147468 = -r147461;
        double r147469 = r147468 * r147461;
        double r147470 = r147467 + r147469;
        double r147471 = r147465 + r147470;
        return r147471;
}

Error

Bits error versus d1

Bits error versus d2

Bits error versus d3

Bits error versus d4

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original0.0
Target0.0
Herbie0.0
\[d1 \cdot \left(\left(\left(d2 - d3\right) + d4\right) - d1\right)\]

Derivation

  1. Initial program 0.0

    \[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
  2. Simplified0.0

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

    \[\leadsto \color{blue}{d1 \cdot \left(d2 - d3\right) + d1 \cdot \left(d4 - d1\right)}\]
  5. Using strategy rm
  6. Applied sub-neg0.0

    \[\leadsto d1 \cdot \left(d2 - d3\right) + d1 \cdot \color{blue}{\left(d4 + \left(-d1\right)\right)}\]
  7. Applied distribute-lft-in0.0

    \[\leadsto d1 \cdot \left(d2 - d3\right) + \color{blue}{\left(d1 \cdot d4 + d1 \cdot \left(-d1\right)\right)}\]
  8. Simplified0.0

    \[\leadsto d1 \cdot \left(d2 - d3\right) + \left(\color{blue}{d4 \cdot d1} + d1 \cdot \left(-d1\right)\right)\]
  9. Simplified0.0

    \[\leadsto d1 \cdot \left(d2 - d3\right) + \left(d4 \cdot d1 + \color{blue}{\left(-d1\right) \cdot d1}\right)\]
  10. Final simplification0.0

    \[\leadsto d1 \cdot \left(d2 - d3\right) + \left(d4 \cdot d1 + \left(-d1\right) \cdot d1\right)\]

Reproduce

herbie shell --seed 2020020 
(FPCore (d1 d2 d3 d4)
  :name "FastMath dist4"
  :precision binary64

  :herbie-target
  (* d1 (- (+ (- d2 d3) d4) d1))

  (- (+ (- (* d1 d2) (* d1 d3)) (* d4 d1)) (* d1 d1)))