Average Error: 0.0 → 0.0
Time: 1.0s
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 r43405 = x_re;
        double r43406 = y_im;
        double r43407 = r43405 * r43406;
        double r43408 = x_im;
        double r43409 = y_re;
        double r43410 = r43408 * r43409;
        double r43411 = r43407 + r43410;
        return r43411;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r43412 = x_re;
        double r43413 = y_im;
        double r43414 = r43412 * r43413;
        double r43415 = x_im;
        double r43416 = y_re;
        double r43417 = r43415 * r43416;
        double r43418 = r43414 + r43417;
        return r43418;
}

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