Average Error: 0.0 → 0.0
Time: 4.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 r81644 = x_re;
        double r81645 = y_im;
        double r81646 = r81644 * r81645;
        double r81647 = x_im;
        double r81648 = y_re;
        double r81649 = r81647 * r81648;
        double r81650 = r81646 + r81649;
        return r81650;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r81651 = x_re;
        double r81652 = y_im;
        double r81653 = r81651 * r81652;
        double r81654 = x_im;
        double r81655 = y_re;
        double r81656 = r81654 * r81655;
        double r81657 = r81653 + r81656;
        return r81657;
}

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