Average Error: 0.0 → 0.0
Time: 4.8s
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 r32607 = x_re;
        double r32608 = y_im;
        double r32609 = r32607 * r32608;
        double r32610 = x_im;
        double r32611 = y_re;
        double r32612 = r32610 * r32611;
        double r32613 = r32609 + r32612;
        return r32613;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r32614 = x_re;
        double r32615 = y_im;
        double r32616 = r32614 * r32615;
        double r32617 = x_im;
        double r32618 = y_re;
        double r32619 = r32617 * r32618;
        double r32620 = r32616 + r32619;
        return r32620;
}

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