Average Error: 0.0 → 0.0
Time: 4.9s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.re \cdot y.im + x.im \cdot y.re\]
x.re \cdot y.im + x.im \cdot y.re
x.re \cdot y.im + x.im \cdot y.re
double f(double x_re, double x_im, double y_re, double y_im) {
        double r307 = x_re;
        double r308 = y_im;
        double r309 = r307 * r308;
        double r310 = x_im;
        double r311 = y_re;
        double r312 = r310 * r311;
        double r313 = r309 + r312;
        return r313;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r314 = x_re;
        double r315 = y_im;
        double r316 = r314 * r315;
        double r317 = x_im;
        double r318 = y_re;
        double r319 = r317 * r318;
        double r320 = r316 + r319;
        return r320;
}

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.re \cdot y.im + x.im \cdot y.re\]

Reproduce

herbie shell --seed 2020025 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  :precision binary64
  (+ (* x.re y.im) (* x.im y.re)))