Average Error: 0.0 → 0.0
Time: 2.4s
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 r86994 = x_re;
        double r86995 = y_im;
        double r86996 = r86994 * r86995;
        double r86997 = x_im;
        double r86998 = y_re;
        double r86999 = r86997 * r86998;
        double r87000 = r86996 + r86999;
        return r87000;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r87001 = x_re;
        double r87002 = y_im;
        double r87003 = r87001 * r87002;
        double r87004 = x_im;
        double r87005 = y_re;
        double r87006 = r87004 * r87005;
        double r87007 = r87003 + r87006;
        return r87007;
}

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