Average Error: 0.0 → 0.0
Time: 9.4s
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 r1322040 = x_re;
        double r1322041 = y_im;
        double r1322042 = r1322040 * r1322041;
        double r1322043 = x_im;
        double r1322044 = y_re;
        double r1322045 = r1322043 * r1322044;
        double r1322046 = r1322042 + r1322045;
        return r1322046;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1322047 = x_im;
        double r1322048 = y_re;
        double r1322049 = r1322047 * r1322048;
        double r1322050 = x_re;
        double r1322051 = y_im;
        double r1322052 = r1322050 * r1322051;
        double r1322053 = r1322049 + r1322052;
        return r1322053;
}

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