Average Error: 0.0 → 0.0
Time: 14.9s
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 r139984 = d1;
        double r139985 = d2;
        double r139986 = r139984 * r139985;
        double r139987 = d3;
        double r139988 = r139984 * r139987;
        double r139989 = r139986 - r139988;
        double r139990 = d4;
        double r139991 = r139990 * r139984;
        double r139992 = r139989 + r139991;
        double r139993 = r139984 * r139984;
        double r139994 = r139992 - r139993;
        return r139994;
}

double f(double d1, double d2, double d3, double d4) {
        double r139995 = d1;
        double r139996 = d2;
        double r139997 = r139995 * r139996;
        double r139998 = d3;
        double r139999 = r139995 * r139998;
        double r140000 = r139997 - r139999;
        double r140001 = d4;
        double r140002 = r140001 * r139995;
        double r140003 = r140000 + r140002;
        double r140004 = r139995 * r139995;
        double r140005 = r140003 - r140004;
        return r140005;
}

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 2019304 +o rules:numerics
(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)))