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 r46639 = x_re;
        double r46640 = y_im;
        double r46641 = r46639 * r46640;
        double r46642 = x_im;
        double r46643 = y_re;
        double r46644 = r46642 * r46643;
        double r46645 = r46641 + r46644;
        return r46645;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r46646 = x_re;
        double r46647 = y_im;
        double r46648 = r46646 * r46647;
        double r46649 = x_im;
        double r46650 = y_re;
        double r46651 = r46649 * r46650;
        double r46652 = r46648 + r46651;
        return r46652;
}

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