Average Error: 0.0 → 0.0
Time: 2.8s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[d1 \cdot \left(\left(d2 - d3\right) + \left(d4 - d1\right)\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d1 \cdot \left(\left(d2 - d3\right) + \left(d4 - d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r269470 = d1;
        double r269471 = d2;
        double r269472 = r269470 * r269471;
        double r269473 = d3;
        double r269474 = r269470 * r269473;
        double r269475 = r269472 - r269474;
        double r269476 = d4;
        double r269477 = r269476 * r269470;
        double r269478 = r269475 + r269477;
        double r269479 = r269470 * r269470;
        double r269480 = r269478 - r269479;
        return r269480;
}

double f(double d1, double d2, double d3, double d4) {
        double r269481 = d1;
        double r269482 = d2;
        double r269483 = d3;
        double r269484 = r269482 - r269483;
        double r269485 = d4;
        double r269486 = r269485 - r269481;
        double r269487 = r269484 + r269486;
        double r269488 = r269481 * r269487;
        return r269488;
}

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. Final simplification0.0

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

Reproduce

herbie shell --seed 2020021 
(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)))