Average Error: 0.0 → 0.0
Time: 2.7s
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 r43356 = x_re;
        double r43357 = y_im;
        double r43358 = r43356 * r43357;
        double r43359 = x_im;
        double r43360 = y_re;
        double r43361 = r43359 * r43360;
        double r43362 = r43358 + r43361;
        return r43362;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r43363 = x_re;
        double r43364 = y_im;
        double r43365 = r43363 * r43364;
        double r43366 = x_im;
        double r43367 = y_re;
        double r43368 = r43366 * r43367;
        double r43369 = r43365 + r43368;
        return r43369;
}

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)))