Average Error: 0.0 → 0.0
Time: 1.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 r87751 = x_re;
        double r87752 = y_im;
        double r87753 = r87751 * r87752;
        double r87754 = x_im;
        double r87755 = y_re;
        double r87756 = r87754 * r87755;
        double r87757 = r87753 + r87756;
        return r87757;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r87758 = x_re;
        double r87759 = y_im;
        double r87760 = r87758 * r87759;
        double r87761 = x_im;
        double r87762 = y_re;
        double r87763 = r87761 * r87762;
        double r87764 = r87760 + r87763;
        return r87764;
}

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