Average Error: 0.0 → 0.0
Time: 889.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 r47068 = x_re;
        double r47069 = y_im;
        double r47070 = r47068 * r47069;
        double r47071 = x_im;
        double r47072 = y_re;
        double r47073 = r47071 * r47072;
        double r47074 = r47070 + r47073;
        return r47074;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47075 = x_re;
        double r47076 = y_im;
        double r47077 = r47075 * r47076;
        double r47078 = x_im;
        double r47079 = y_re;
        double r47080 = r47078 * r47079;
        double r47081 = r47077 + r47080;
        return r47081;
}

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