Average Error: 0.0 → 0.0
Time: 3.7s
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 r72469 = x_re;
        double r72470 = y_im;
        double r72471 = r72469 * r72470;
        double r72472 = x_im;
        double r72473 = y_re;
        double r72474 = r72472 * r72473;
        double r72475 = r72471 + r72474;
        return r72475;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r72476 = x_re;
        double r72477 = y_im;
        double r72478 = r72476 * r72477;
        double r72479 = x_im;
        double r72480 = y_re;
        double r72481 = r72479 * r72480;
        double r72482 = r72478 + r72481;
        return r72482;
}

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