Average Error: 0.0 → 0.0
Time: 6.5s
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 r48697 = x_re;
        double r48698 = y_im;
        double r48699 = r48697 * r48698;
        double r48700 = x_im;
        double r48701 = y_re;
        double r48702 = r48700 * r48701;
        double r48703 = r48699 + r48702;
        return r48703;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r48704 = x_re;
        double r48705 = y_im;
        double r48706 = r48704 * r48705;
        double r48707 = x_im;
        double r48708 = y_re;
        double r48709 = r48707 * r48708;
        double r48710 = r48706 + r48709;
        return r48710;
}

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)))