Average Error: 0.0 → 0.0
Time: 16.0s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[d1 \cdot \left(\left(d2 - d3\right) + \left(d4 - d1\right)\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d1 \cdot \left(\left(d2 - d3\right) + \left(d4 - d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r276193 = d1;
        double r276194 = d2;
        double r276195 = r276193 * r276194;
        double r276196 = d3;
        double r276197 = r276193 * r276196;
        double r276198 = r276195 - r276197;
        double r276199 = d4;
        double r276200 = r276199 * r276193;
        double r276201 = r276198 + r276200;
        double r276202 = r276193 * r276193;
        double r276203 = r276201 - r276202;
        return r276203;
}

double f(double d1, double d2, double d3, double d4) {
        double r276204 = d1;
        double r276205 = d2;
        double r276206 = d3;
        double r276207 = r276205 - r276206;
        double r276208 = d4;
        double r276209 = r276208 - r276204;
        double r276210 = r276207 + r276209;
        double r276211 = r276204 * r276210;
        return r276211;
}

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

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

Reproduce

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