Average Error: 0.0 → 0.0
Time: 5.1s
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 r248170 = d1;
        double r248171 = d2;
        double r248172 = r248170 * r248171;
        double r248173 = d3;
        double r248174 = r248170 * r248173;
        double r248175 = r248172 - r248174;
        double r248176 = d4;
        double r248177 = r248176 * r248170;
        double r248178 = r248175 + r248177;
        double r248179 = r248170 * r248170;
        double r248180 = r248178 - r248179;
        return r248180;
}

double f(double d1, double d2, double d3, double d4) {
        double r248181 = d1;
        double r248182 = d2;
        double r248183 = d3;
        double r248184 = r248182 - r248183;
        double r248185 = d4;
        double r248186 = r248185 - r248181;
        double r248187 = r248184 + r248186;
        double r248188 = r248181 * r248187;
        return r248188;
}

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 2020083 
(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)))