Average Error: 0.0 → 0.0
Time: 2.7s
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 r437091 = d1;
        double r437092 = d2;
        double r437093 = r437091 * r437092;
        double r437094 = d3;
        double r437095 = r437091 * r437094;
        double r437096 = r437093 - r437095;
        double r437097 = d4;
        double r437098 = r437097 * r437091;
        double r437099 = r437096 + r437098;
        double r437100 = r437091 * r437091;
        double r437101 = r437099 - r437100;
        return r437101;
}

double f(double d1, double d2, double d3, double d4) {
        double r437102 = d1;
        double r437103 = d2;
        double r437104 = d3;
        double r437105 = r437103 - r437104;
        double r437106 = d4;
        double r437107 = r437106 - r437102;
        double r437108 = r437105 + r437107;
        double r437109 = r437102 * r437108;
        return r437109;
}

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