Average Error: 0.0 → 0.0
Time: 17.3s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2053671 = x_re;
        double r2053672 = y_im;
        double r2053673 = r2053671 * r2053672;
        double r2053674 = x_im;
        double r2053675 = y_re;
        double r2053676 = r2053674 * r2053675;
        double r2053677 = r2053673 + r2053676;
        return r2053677;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2053678 = x_im;
        double r2053679 = y_re;
        double r2053680 = r2053678 * r2053679;
        double r2053681 = x_re;
        double r2053682 = y_im;
        double r2053683 = r2053681 * r2053682;
        double r2053684 = r2053680 + r2053683;
        return r2053684;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019168 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))