Average Error: 0.0 → 0.0
Time: 3.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 r1116232 = x_re;
        double r1116233 = y_im;
        double r1116234 = r1116232 * r1116233;
        double r1116235 = x_im;
        double r1116236 = y_re;
        double r1116237 = r1116235 * r1116236;
        double r1116238 = r1116234 + r1116237;
        return r1116238;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1116239 = x_im;
        double r1116240 = y_re;
        double r1116241 = r1116239 * r1116240;
        double r1116242 = x_re;
        double r1116243 = y_im;
        double r1116244 = r1116242 * r1116243;
        double r1116245 = r1116241 + r1116244;
        return r1116245;
}

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