Average Error: 0.0 → 0.0
Time: 1.5s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
double f(double d1, double d2, double d3, double d4) {
        double r289292 = d1;
        double r289293 = d2;
        double r289294 = r289292 * r289293;
        double r289295 = d3;
        double r289296 = r289292 * r289295;
        double r289297 = r289294 - r289296;
        double r289298 = d4;
        double r289299 = r289298 * r289292;
        double r289300 = r289297 + r289299;
        double r289301 = r289292 * r289292;
        double r289302 = r289300 - r289301;
        return r289302;
}

double f(double d1, double d2, double d3, double d4) {
        double r289303 = d1;
        double r289304 = d2;
        double r289305 = r289303 * r289304;
        double r289306 = d3;
        double r289307 = r289303 * r289306;
        double r289308 = r289305 - r289307;
        double r289309 = d4;
        double r289310 = r289309 * r289303;
        double r289311 = r289308 + r289310;
        double r289312 = r289303 * r289303;
        double r289313 = r289311 - r289312;
        return r289313;
}

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

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

Reproduce

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