Average Error: 0.0 → 0.0
Time: 5.9s
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 r54669 = x_re;
        double r54670 = y_re;
        double r54671 = r54669 * r54670;
        double r54672 = x_im;
        double r54673 = y_im;
        double r54674 = r54672 * r54673;
        double r54675 = r54671 - r54674;
        return r54675;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r54676 = x_re;
        double r54677 = y_re;
        double r54678 = r54676 * r54677;
        double r54679 = x_im;
        double r54680 = y_im;
        double r54681 = r54679 * r54680;
        double r54682 = r54678 - r54681;
        return r54682;
}

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 2019212 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  :precision binary64
  (- (* x.re y.re) (* x.im y.im)))