Average Error: 0.0 → 0.0
Time: 798.0ms
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 r38057 = x_re;
        double r38058 = y_im;
        double r38059 = r38057 * r38058;
        double r38060 = x_im;
        double r38061 = y_re;
        double r38062 = r38060 * r38061;
        double r38063 = r38059 + r38062;
        return r38063;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r38064 = x_re;
        double r38065 = y_im;
        double r38066 = r38064 * r38065;
        double r38067 = x_im;
        double r38068 = y_re;
        double r38069 = r38067 * r38068;
        double r38070 = r38066 + r38069;
        return r38070;
}

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