Average Error: 0.0 → 0.0
Time: 1.6s
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 r31730 = x_re;
        double r31731 = y_im;
        double r31732 = r31730 * r31731;
        double r31733 = x_im;
        double r31734 = y_re;
        double r31735 = r31733 * r31734;
        double r31736 = r31732 + r31735;
        return r31736;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r31737 = x_re;
        double r31738 = y_im;
        double r31739 = r31737 * r31738;
        double r31740 = x_im;
        double r31741 = y_re;
        double r31742 = r31740 * r31741;
        double r31743 = r31739 + r31742;
        return r31743;
}

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