Average Error: 0.0 → 0.0
Time: 2.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 r65622 = x_re;
        double r65623 = y_im;
        double r65624 = r65622 * r65623;
        double r65625 = x_im;
        double r65626 = y_re;
        double r65627 = r65625 * r65626;
        double r65628 = r65624 + r65627;
        return r65628;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r65629 = x_re;
        double r65630 = y_im;
        double r65631 = r65629 * r65630;
        double r65632 = x_im;
        double r65633 = y_re;
        double r65634 = r65632 * r65633;
        double r65635 = r65631 + r65634;
        return r65635;
}

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