Average Error: 0.0 → 0.0
Time: 15.7s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[\left(d1 \cdot d1 - d1 \cdot d1\right) + 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
\left(d1 \cdot d1 - d1 \cdot d1\right) + d1 \cdot \left(\left(d2 - d3\right) + \left(d4 - d1\right)\right)
double f(double d1, double d2, double d3, double d4) {
        double r11984176 = d1;
        double r11984177 = d2;
        double r11984178 = r11984176 * r11984177;
        double r11984179 = d3;
        double r11984180 = r11984176 * r11984179;
        double r11984181 = r11984178 - r11984180;
        double r11984182 = d4;
        double r11984183 = r11984182 * r11984176;
        double r11984184 = r11984181 + r11984183;
        double r11984185 = r11984176 * r11984176;
        double r11984186 = r11984184 - r11984185;
        return r11984186;
}

double f(double d1, double d2, double d3, double d4) {
        double r11984187 = d1;
        double r11984188 = r11984187 * r11984187;
        double r11984189 = r11984188 - r11984188;
        double r11984190 = d2;
        double r11984191 = d3;
        double r11984192 = r11984190 - r11984191;
        double r11984193 = d4;
        double r11984194 = r11984193 - r11984187;
        double r11984195 = r11984192 + r11984194;
        double r11984196 = r11984187 * r11984195;
        double r11984197 = r11984189 + r11984196;
        return r11984197;
}

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. Using strategy rm
  3. Applied *-un-lft-identity0.0

    \[\leadsto \color{blue}{1 \cdot \left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right)} - d1 \cdot d1\]
  4. Applied prod-diff0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(1, \left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1, -d1 \cdot d1\right) + \mathsf{fma}\left(-d1, d1, d1 \cdot d1\right)}\]
  5. Simplified0.0

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

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

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

Reproduce

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