Average Error: 0.0 → 0.0
Time: 5.0s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[d1 \cdot \left(d2 + \left(d4 - \left(d3 + d1\right)\right)\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d1 \cdot \left(d2 + \left(d4 - \left(d3 + d1\right)\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r3610235 = d1;
        double r3610236 = d2;
        double r3610237 = r3610235 * r3610236;
        double r3610238 = d3;
        double r3610239 = r3610235 * r3610238;
        double r3610240 = r3610237 - r3610239;
        double r3610241 = d4;
        double r3610242 = r3610241 * r3610235;
        double r3610243 = r3610240 + r3610242;
        double r3610244 = r3610235 * r3610235;
        double r3610245 = r3610243 - r3610244;
        return r3610245;
}

double f(double d1, double d2, double d3, double d4) {
        double r3610246 = d1;
        double r3610247 = d2;
        double r3610248 = d4;
        double r3610249 = d3;
        double r3610250 = r3610249 + r3610246;
        double r3610251 = r3610248 - r3610250;
        double r3610252 = r3610247 + r3610251;
        double r3610253 = r3610246 * r3610252;
        return r3610253;
}

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

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

Reproduce

herbie shell --seed 2019156 +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)))