Average Error: 0.0 → 0.0
Time: 32.9s
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 r3217979 = x_re;
        double r3217980 = y_im;
        double r3217981 = r3217979 * r3217980;
        double r3217982 = x_im;
        double r3217983 = y_re;
        double r3217984 = r3217982 * r3217983;
        double r3217985 = r3217981 + r3217984;
        return r3217985;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3217986 = x_im;
        double r3217987 = y_re;
        double r3217988 = r3217986 * r3217987;
        double r3217989 = x_re;
        double r3217990 = y_im;
        double r3217991 = r3217989 * r3217990;
        double r3217992 = r3217988 + r3217991;
        return r3217992;
}

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