Average Error: 0.0 → 0.0
Time: 4.3s
Precision: 64
\[\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1\]
\[\left(d2 - d3\right) \cdot d1 + d1 \cdot \left(d4 - d1\right)\]
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
\left(d2 - d3\right) \cdot d1 + d1 \cdot \left(d4 - d1\right)
double f(double d1, double d2, double d3, double d4) {
        double r224789 = d1;
        double r224790 = d2;
        double r224791 = r224789 * r224790;
        double r224792 = d3;
        double r224793 = r224789 * r224792;
        double r224794 = r224791 - r224793;
        double r224795 = d4;
        double r224796 = r224795 * r224789;
        double r224797 = r224794 + r224796;
        double r224798 = r224789 * r224789;
        double r224799 = r224797 - r224798;
        return r224799;
}

double f(double d1, double d2, double d3, double d4) {
        double r224800 = d2;
        double r224801 = d3;
        double r224802 = r224800 - r224801;
        double r224803 = d1;
        double r224804 = r224802 * r224803;
        double r224805 = d4;
        double r224806 = r224805 - r224803;
        double r224807 = r224803 * r224806;
        double r224808 = r224804 + r224807;
        return r224808;
}

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}{\mathsf{fma}\left(d2 - d3, d1, d1 \cdot \left(d4 - d1\right)\right)}\]
  3. Using strategy rm
  4. Applied fma-udef0.0

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

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

Reproduce

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