Average Error: 0.0 → 0.0
Time: 11.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 r33558 = x_re;
        double r33559 = y_im;
        double r33560 = r33558 * r33559;
        double r33561 = x_im;
        double r33562 = y_re;
        double r33563 = r33561 * r33562;
        double r33564 = r33560 + r33563;
        return r33564;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r33565 = x_re;
        double r33566 = y_im;
        double r33567 = r33565 * r33566;
        double r33568 = x_im;
        double r33569 = y_re;
        double r33570 = r33568 * r33569;
        double r33571 = r33567 + r33570;
        return r33571;
}

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