Average Error: 0.0 → 0.0
Time: 15.2s
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 r2699983 = x_re;
        double r2699984 = y_im;
        double r2699985 = r2699983 * r2699984;
        double r2699986 = x_im;
        double r2699987 = y_re;
        double r2699988 = r2699986 * r2699987;
        double r2699989 = r2699985 + r2699988;
        return r2699989;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2699990 = x_im;
        double r2699991 = y_re;
        double r2699992 = r2699990 * r2699991;
        double r2699993 = x_re;
        double r2699994 = y_im;
        double r2699995 = r2699993 * r2699994;
        double r2699996 = r2699992 + r2699995;
        return r2699996;
}

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