Average Error: 0.0 → 0.0
Time: 8.2s
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 r37048 = x_re;
        double r37049 = y_im;
        double r37050 = r37048 * r37049;
        double r37051 = x_im;
        double r37052 = y_re;
        double r37053 = r37051 * r37052;
        double r37054 = r37050 + r37053;
        return r37054;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r37055 = x_re;
        double r37056 = y_im;
        double r37057 = r37055 * r37056;
        double r37058 = x_im;
        double r37059 = y_re;
        double r37060 = r37058 * r37059;
        double r37061 = r37057 + r37060;
        return r37061;
}

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