Average Error: 0.0 → 0.0
Time: 5.4s
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 r59766 = x_re;
        double r59767 = y_im;
        double r59768 = r59766 * r59767;
        double r59769 = x_im;
        double r59770 = y_re;
        double r59771 = r59769 * r59770;
        double r59772 = r59768 + r59771;
        return r59772;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r59773 = x_re;
        double r59774 = y_im;
        double r59775 = r59773 * r59774;
        double r59776 = x_im;
        double r59777 = y_re;
        double r59778 = r59776 * r59777;
        double r59779 = r59775 + r59778;
        return r59779;
}

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