Average Error: 0.0 → 0.0
Time: 5.1s
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 r993703 = x_re;
        double r993704 = y_im;
        double r993705 = r993703 * r993704;
        double r993706 = x_im;
        double r993707 = y_re;
        double r993708 = r993706 * r993707;
        double r993709 = r993705 + r993708;
        return r993709;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r993710 = x_im;
        double r993711 = y_re;
        double r993712 = r993710 * r993711;
        double r993713 = x_re;
        double r993714 = y_im;
        double r993715 = r993713 * r993714;
        double r993716 = r993712 + r993715;
        return r993716;
}

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