Average Error: 0.0 → 0.0
Time: 1.3s
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 r99182 = x_re;
        double r99183 = y_im;
        double r99184 = r99182 * r99183;
        double r99185 = x_im;
        double r99186 = y_re;
        double r99187 = r99185 * r99186;
        double r99188 = r99184 + r99187;
        return r99188;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r99189 = x_re;
        double r99190 = y_im;
        double r99191 = r99189 * r99190;
        double r99192 = x_im;
        double r99193 = y_re;
        double r99194 = r99192 * r99193;
        double r99195 = r99191 + r99194;
        return r99195;
}

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)))