Average Error: 0.0 → 0.0
Time: 10.3s
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 r43727 = x_re;
        double r43728 = y_im;
        double r43729 = r43727 * r43728;
        double r43730 = x_im;
        double r43731 = y_re;
        double r43732 = r43730 * r43731;
        double r43733 = r43729 + r43732;
        return r43733;
}

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;
}

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