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\]
\[d2 \cdot d1 + d1 \cdot \left(\left(-d3\right) + \left(d4 - d1\right)\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
d2 \cdot d1 + d1 \cdot \left(\left(-d3\right) + \left(d4 - d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r241147 = d1;
        double r241148 = d2;
        double r241149 = r241147 * r241148;
        double r241150 = d3;
        double r241151 = r241147 * r241150;
        double r241152 = r241149 - r241151;
        double r241153 = d4;
        double r241154 = r241153 * r241147;
        double r241155 = r241152 + r241154;
        double r241156 = r241147 * r241147;
        double r241157 = r241155 - r241156;
        return r241157;
}

double f(double d1, double d2, double d3, double d4) {
        double r241158 = d2;
        double r241159 = d1;
        double r241160 = r241158 * r241159;
        double r241161 = d3;
        double r241162 = -r241161;
        double r241163 = d4;
        double r241164 = r241163 - r241159;
        double r241165 = r241162 + r241164;
        double r241166 = r241159 * r241165;
        double r241167 = r241160 + r241166;
        return r241167;
}

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. Using strategy rm
  4. Applied distribute-lft-in0.0

    \[\leadsto \color{blue}{d1 \cdot \left(d2 - d3\right) + d1 \cdot \left(d4 - d1\right)}\]
  5. Using strategy rm
  6. Applied sub-neg0.0

    \[\leadsto d1 \cdot \color{blue}{\left(d2 + \left(-d3\right)\right)} + d1 \cdot \left(d4 - d1\right)\]
  7. Applied distribute-rgt-in0.0

    \[\leadsto \color{blue}{\left(d2 \cdot d1 + \left(-d3\right) \cdot d1\right)} + d1 \cdot \left(d4 - d1\right)\]
  8. Applied associate-+l+0.0

    \[\leadsto \color{blue}{d2 \cdot d1 + \left(\left(-d3\right) \cdot d1 + d1 \cdot \left(d4 - d1\right)\right)}\]
  9. Simplified0.0

    \[\leadsto d2 \cdot d1 + \color{blue}{d1 \cdot \left(\left(-d3\right) + \left(d4 - d1\right)\right)}\]
  10. Final simplification0.0

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

Reproduce

herbie shell --seed 2020056 
(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)))