Average Error: 0.0 → 0.0
Time: 13.0s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[d1 \cdot \left(d4 + \left(\left(d2 - d3\right) - d1\right)\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d1 \cdot \left(d4 + \left(\left(d2 - d3\right) - d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r9310072 = d1;
        double r9310073 = d2;
        double r9310074 = r9310072 * r9310073;
        double r9310075 = d3;
        double r9310076 = r9310072 * r9310075;
        double r9310077 = r9310074 - r9310076;
        double r9310078 = d4;
        double r9310079 = r9310078 * r9310072;
        double r9310080 = r9310077 + r9310079;
        double r9310081 = r9310072 * r9310072;
        double r9310082 = r9310080 - r9310081;
        return r9310082;
}

double f(double d1, double d2, double d3, double d4) {
        double r9310083 = d1;
        double r9310084 = d4;
        double r9310085 = d2;
        double r9310086 = d3;
        double r9310087 = r9310085 - r9310086;
        double r9310088 = r9310087 - r9310083;
        double r9310089 = r9310084 + r9310088;
        double r9310090 = r9310083 * r9310089;
        return r9310090;
}

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(\left(d2 - d3\right) - d1\right) + d4\right)}\]
  3. Final simplification0.0

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

Reproduce

herbie shell --seed 2019129 +o rules:numerics
(FPCore (d1 d2 d3 d4)
  :name "FastMath dist4"

  :herbie-target
  (* d1 (- (+ (- d2 d3) d4) d1))

  (- (+ (- (* d1 d2) (* d1 d3)) (* d4 d1)) (* d1 d1)))