Average Error: 0.0 → 0.0
Time: 2.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 r437279 = x_re;
        double r437280 = y_im;
        double r437281 = r437279 * r437280;
        double r437282 = x_im;
        double r437283 = y_re;
        double r437284 = r437282 * r437283;
        double r437285 = r437281 + r437284;
        return r437285;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r437286 = x_im;
        double r437287 = y_re;
        double r437288 = r437286 * r437287;
        double r437289 = x_re;
        double r437290 = y_im;
        double r437291 = r437289 * r437290;
        double r437292 = r437288 + r437291;
        return r437292;
}

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