Average Error: 0.0 → 0.0
Time: 1.5s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r792994 = x_re;
        double r792995 = y_im;
        double r792996 = r792994 * r792995;
        double r792997 = x_im;
        double r792998 = y_re;
        double r792999 = r792997 * r792998;
        double r793000 = r792996 + r792999;
        return r793000;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r793001 = x_im;
        double r793002 = y_re;
        double r793003 = r793001 * r793002;
        double r793004 = x_re;
        double r793005 = y_im;
        double r793006 = r793004 * r793005;
        double r793007 = r793003 + r793006;
        return r793007;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019139 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))