Average Error: 0.0 → 0.0
Time: 4.5s
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 r25380 = x_re;
        double r25381 = y_im;
        double r25382 = r25380 * r25381;
        double r25383 = x_im;
        double r25384 = y_re;
        double r25385 = r25383 * r25384;
        double r25386 = r25382 + r25385;
        return r25386;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r25387 = x_re;
        double r25388 = y_im;
        double r25389 = r25387 * r25388;
        double r25390 = x_im;
        double r25391 = y_re;
        double r25392 = r25390 * r25391;
        double r25393 = r25389 + r25392;
        return r25393;
}

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