Average Error: 0.0 → 0.0
Time: 3.9s
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 r30759 = x_re;
        double r30760 = y_im;
        double r30761 = r30759 * r30760;
        double r30762 = x_im;
        double r30763 = y_re;
        double r30764 = r30762 * r30763;
        double r30765 = r30761 + r30764;
        return r30765;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r30766 = x_re;
        double r30767 = y_im;
        double r30768 = r30766 * r30767;
        double r30769 = x_im;
        double r30770 = y_re;
        double r30771 = r30769 * r30770;
        double r30772 = r30768 + r30771;
        return r30772;
}

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