Average Error: 0.0 → 0.0
Time: 1.4s
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 r47782 = x_re;
        double r47783 = y_im;
        double r47784 = r47782 * r47783;
        double r47785 = x_im;
        double r47786 = y_re;
        double r47787 = r47785 * r47786;
        double r47788 = r47784 + r47787;
        return r47788;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47789 = x_re;
        double r47790 = y_im;
        double r47791 = r47789 * r47790;
        double r47792 = x_im;
        double r47793 = y_re;
        double r47794 = r47792 * r47793;
        double r47795 = r47791 + r47794;
        return r47795;
}

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