Average Error: 0.0 → 0.0
Time: 2.6s
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 r291557 = d1;
        double r291558 = d2;
        double r291559 = r291557 * r291558;
        double r291560 = d3;
        double r291561 = r291557 * r291560;
        double r291562 = r291559 - r291561;
        double r291563 = d4;
        double r291564 = r291563 * r291557;
        double r291565 = r291562 + r291564;
        double r291566 = r291557 * r291557;
        double r291567 = r291565 - r291566;
        return r291567;
}

double f(double d1, double d2, double d3, double d4) {
        double r291568 = d1;
        double r291569 = d2;
        double r291570 = r291568 * r291569;
        double r291571 = d3;
        double r291572 = r291568 * r291571;
        double r291573 = r291570 - r291572;
        double r291574 = d4;
        double r291575 = r291574 * r291568;
        double r291576 = r291573 + r291575;
        double r291577 = r291568 * r291568;
        double r291578 = r291576 - r291577;
        return r291578;
}

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