Average Error: 0.0 → 0.0
Time: 1.7s
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 r1069139 = x_re;
        double r1069140 = y_im;
        double r1069141 = r1069139 * r1069140;
        double r1069142 = x_im;
        double r1069143 = y_re;
        double r1069144 = r1069142 * r1069143;
        double r1069145 = r1069141 + r1069144;
        return r1069145;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1069146 = x_im;
        double r1069147 = y_re;
        double r1069148 = r1069146 * r1069147;
        double r1069149 = x_re;
        double r1069150 = y_im;
        double r1069151 = r1069149 * r1069150;
        double r1069152 = r1069148 + r1069151;
        return r1069152;
}

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