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 r36467 = x_re;
        double r36468 = y_im;
        double r36469 = r36467 * r36468;
        double r36470 = x_im;
        double r36471 = y_re;
        double r36472 = r36470 * r36471;
        double r36473 = r36469 + r36472;
        return r36473;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r36474 = x_re;
        double r36475 = y_im;
        double r36476 = r36474 * r36475;
        double r36477 = x_im;
        double r36478 = y_re;
        double r36479 = r36477 * r36478;
        double r36480 = r36476 + r36479;
        return r36480;
}

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