Average Error: 0.0 → 0.0
Time: 10.8s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2744780 = x_re;
        double r2744781 = y_im;
        double r2744782 = r2744780 * r2744781;
        double r2744783 = x_im;
        double r2744784 = y_re;
        double r2744785 = r2744783 * r2744784;
        double r2744786 = r2744782 + r2744785;
        return r2744786;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2744787 = x_im;
        double r2744788 = y_re;
        double r2744789 = r2744787 * r2744788;
        double r2744790 = x_re;
        double r2744791 = y_im;
        double r2744792 = r2744790 * r2744791;
        double r2744793 = r2744789 + r2744792;
        return r2744793;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019162 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))