Average Error: 0.0 → 0.0
Time: 11.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 r1342371 = x_re;
        double r1342372 = y_im;
        double r1342373 = r1342371 * r1342372;
        double r1342374 = x_im;
        double r1342375 = y_re;
        double r1342376 = r1342374 * r1342375;
        double r1342377 = r1342373 + r1342376;
        return r1342377;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1342378 = x_im;
        double r1342379 = y_re;
        double r1342380 = r1342378 * r1342379;
        double r1342381 = x_re;
        double r1342382 = y_im;
        double r1342383 = r1342381 * r1342382;
        double r1342384 = r1342380 + r1342383;
        return r1342384;
}

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