Average Error: 0.0 → 0.0
Time: 2.5s
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 r114583 = x_re;
        double r114584 = y_im;
        double r114585 = r114583 * r114584;
        double r114586 = x_im;
        double r114587 = y_re;
        double r114588 = r114586 * r114587;
        double r114589 = r114585 + r114588;
        return r114589;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r114590 = x_re;
        double r114591 = y_im;
        double r114592 = r114590 * r114591;
        double r114593 = x_im;
        double r114594 = y_re;
        double r114595 = r114593 * r114594;
        double r114596 = r114592 + r114595;
        return r114596;
}

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