Average Error: 0.0 → 0.0
Time: 3.3s
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 r55423 = x_re;
        double r55424 = y_im;
        double r55425 = r55423 * r55424;
        double r55426 = x_im;
        double r55427 = y_re;
        double r55428 = r55426 * r55427;
        double r55429 = r55425 + r55428;
        return r55429;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r55430 = x_re;
        double r55431 = y_im;
        double r55432 = r55430 * r55431;
        double r55433 = x_im;
        double r55434 = y_re;
        double r55435 = r55433 * r55434;
        double r55436 = r55432 + r55435;
        return r55436;
}

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