Average Error: 0.0 → 0.0
Time: 2.1s
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 r39034 = x_re;
        double r39035 = y_im;
        double r39036 = r39034 * r39035;
        double r39037 = x_im;
        double r39038 = y_re;
        double r39039 = r39037 * r39038;
        double r39040 = r39036 + r39039;
        return r39040;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r39041 = x_re;
        double r39042 = y_im;
        double r39043 = r39041 * r39042;
        double r39044 = x_im;
        double r39045 = y_re;
        double r39046 = r39044 * r39045;
        double r39047 = r39043 + r39046;
        return r39047;
}

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