Average Error: 0.0 → 0.0
Time: 711.0ms
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 r96725 = x_re;
        double r96726 = y_im;
        double r96727 = r96725 * r96726;
        double r96728 = x_im;
        double r96729 = y_re;
        double r96730 = r96728 * r96729;
        double r96731 = r96727 + r96730;
        return r96731;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r96732 = x_re;
        double r96733 = y_im;
        double r96734 = r96732 * r96733;
        double r96735 = x_im;
        double r96736 = y_re;
        double r96737 = r96735 * r96736;
        double r96738 = r96734 + r96737;
        return r96738;
}

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