Average Error: 0.0 → 0.0
Time: 12.1s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2435576 = x_re;
        double r2435577 = y_im;
        double r2435578 = r2435576 * r2435577;
        double r2435579 = x_im;
        double r2435580 = y_re;
        double r2435581 = r2435579 * r2435580;
        double r2435582 = r2435578 + r2435581;
        return r2435582;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2435583 = x_im;
        double r2435584 = y_re;
        double r2435585 = r2435583 * r2435584;
        double r2435586 = x_re;
        double r2435587 = y_im;
        double r2435588 = r2435586 * r2435587;
        double r2435589 = r2435585 + r2435588;
        return r2435589;
}

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

Reproduce

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