Average Error: 0.0 → 0.0
Time: 18.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 r5961826 = x_re;
        double r5961827 = y_im;
        double r5961828 = r5961826 * r5961827;
        double r5961829 = x_im;
        double r5961830 = y_re;
        double r5961831 = r5961829 * r5961830;
        double r5961832 = r5961828 + r5961831;
        return r5961832;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r5961833 = x_re;
        double r5961834 = y_im;
        double r5961835 = r5961833 * r5961834;
        double r5961836 = x_im;
        double r5961837 = y_re;
        double r5961838 = r5961836 * r5961837;
        double r5961839 = r5961835 + r5961838;
        return r5961839;
}

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