Average Error: 0.0 → 0.0
Time: 988.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 r47602 = x_re;
        double r47603 = y_im;
        double r47604 = r47602 * r47603;
        double r47605 = x_im;
        double r47606 = y_re;
        double r47607 = r47605 * r47606;
        double r47608 = r47604 + r47607;
        return r47608;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47609 = x_re;
        double r47610 = y_im;
        double r47611 = r47609 * r47610;
        double r47612 = x_im;
        double r47613 = y_re;
        double r47614 = r47612 * r47613;
        double r47615 = r47611 + r47614;
        return r47615;
}

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