Average Error: 0.0 → 0.0
Time: 10.1s
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 r43734 = x_re;
        double r43735 = y_im;
        double r43736 = r43734 * r43735;
        double r43737 = x_im;
        double r43738 = y_re;
        double r43739 = r43737 * r43738;
        double r43740 = r43736 + r43739;
        return r43740;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r43741 = x_re;
        double r43742 = y_im;
        double r43743 = r43741 * r43742;
        double r43744 = x_im;
        double r43745 = y_re;
        double r43746 = r43744 * r43745;
        double r43747 = r43743 + r43746;
        return r43747;
}

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