Average Error: 0.0 → 0.0
Time: 881.0ms
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 r49358 = x_re;
        double r49359 = y_im;
        double r49360 = r49358 * r49359;
        double r49361 = x_im;
        double r49362 = y_re;
        double r49363 = r49361 * r49362;
        double r49364 = r49360 + r49363;
        return r49364;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r49365 = x_re;
        double r49366 = y_im;
        double r49367 = r49365 * r49366;
        double r49368 = x_im;
        double r49369 = y_re;
        double r49370 = r49368 * r49369;
        double r49371 = r49367 + r49370;
        return r49371;
}

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