Average Error: 0.0 → 0.0
Time: 867.0ms
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 r113414 = x_re;
        double r113415 = y_im;
        double r113416 = r113414 * r113415;
        double r113417 = x_im;
        double r113418 = y_re;
        double r113419 = r113417 * r113418;
        double r113420 = r113416 + r113419;
        return r113420;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r113421 = x_re;
        double r113422 = y_im;
        double r113423 = r113421 * r113422;
        double r113424 = x_im;
        double r113425 = y_re;
        double r113426 = r113424 * r113425;
        double r113427 = r113423 + r113426;
        return r113427;
}

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