Average Error: 0.0 → 0.0
Time: 4.0s
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 r350083 = d1;
        double r350084 = d2;
        double r350085 = r350083 * r350084;
        double r350086 = d3;
        double r350087 = r350083 * r350086;
        double r350088 = r350085 - r350087;
        double r350089 = d4;
        double r350090 = r350089 * r350083;
        double r350091 = r350088 + r350090;
        double r350092 = r350083 * r350083;
        double r350093 = r350091 - r350092;
        return r350093;
}

double f(double d1, double d2, double d3, double d4) {
        double r350094 = d1;
        double r350095 = d2;
        double r350096 = r350094 * r350095;
        double r350097 = d3;
        double r350098 = r350094 * r350097;
        double r350099 = r350096 - r350098;
        double r350100 = d4;
        double r350101 = r350100 * r350094;
        double r350102 = r350099 + r350101;
        double r350103 = r350094 * r350094;
        double r350104 = r350102 - r350103;
        return r350104;
}

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