Average Error: 0.0 → 0.0
Time: 6.8s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.re \cdot y.im + x.im \cdot y.re\]
x.re \cdot y.im + x.im \cdot y.re
x.re \cdot y.im + x.im \cdot y.re
double f(double x_re, double x_im, double y_re, double y_im) {
        double r66755 = x_re;
        double r66756 = y_im;
        double r66757 = r66755 * r66756;
        double r66758 = x_im;
        double r66759 = y_re;
        double r66760 = r66758 * r66759;
        double r66761 = r66757 + r66760;
        return r66761;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r66762 = x_re;
        double r66763 = y_im;
        double r66764 = r66762 * r66763;
        double r66765 = x_im;
        double r66766 = y_re;
        double r66767 = r66765 * r66766;
        double r66768 = r66764 + r66767;
        return r66768;
}

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.im + x.im \cdot y.re\]
  2. Final simplification0.0

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

Reproduce

herbie shell --seed 2020042 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  :precision binary64
  (+ (* x.re y.im) (* x.im y.re)))