Average Error: 0.0 → 0.0
Time: 1.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 r51624 = x_re;
        double r51625 = y_im;
        double r51626 = r51624 * r51625;
        double r51627 = x_im;
        double r51628 = y_re;
        double r51629 = r51627 * r51628;
        double r51630 = r51626 + r51629;
        return r51630;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r51631 = x_re;
        double r51632 = y_im;
        double r51633 = r51631 * r51632;
        double r51634 = x_im;
        double r51635 = y_re;
        double r51636 = r51634 * r51635;
        double r51637 = r51633 + r51636;
        return r51637;
}

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