Average Error: 0.0 → 0.0
Time: 2.9s
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 r55883 = x_re;
        double r55884 = y_im;
        double r55885 = r55883 * r55884;
        double r55886 = x_im;
        double r55887 = y_re;
        double r55888 = r55886 * r55887;
        double r55889 = r55885 + r55888;
        return r55889;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r55890 = x_re;
        double r55891 = y_im;
        double r55892 = r55890 * r55891;
        double r55893 = x_im;
        double r55894 = y_re;
        double r55895 = r55893 * r55894;
        double r55896 = r55892 + r55895;
        return r55896;
}

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