Average Error: 0.0 → 0.0
Time: 600.0ms
Precision: 64
\[x.re \cdot y.re - x.im \cdot y.im\]
\[x.re \cdot y.re - x.im \cdot y.im\]
x.re \cdot y.re - x.im \cdot y.im
x.re \cdot y.re - x.im \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r46612 = x_re;
        double r46613 = y_re;
        double r46614 = r46612 * r46613;
        double r46615 = x_im;
        double r46616 = y_im;
        double r46617 = r46615 * r46616;
        double r46618 = r46614 - r46617;
        return r46618;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r46619 = x_re;
        double r46620 = y_re;
        double r46621 = r46619 * r46620;
        double r46622 = x_im;
        double r46623 = y_im;
        double r46624 = r46622 * r46623;
        double r46625 = r46621 - r46624;
        return r46625;
}

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

    \[x.re \cdot y.re - x.im \cdot y.im\]
  2. Final simplification0.0

    \[\leadsto x.re \cdot y.re - x.im \cdot y.im\]

Reproduce

herbie shell --seed 2020059 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  :precision binary64
  (- (* x.re y.re) (* x.im y.im)))