Average Error: 0.0 → 0.0
Time: 5.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 r28848 = x_re;
        double r28849 = y_im;
        double r28850 = r28848 * r28849;
        double r28851 = x_im;
        double r28852 = y_re;
        double r28853 = r28851 * r28852;
        double r28854 = r28850 + r28853;
        return r28854;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r28855 = x_re;
        double r28856 = y_im;
        double r28857 = r28855 * r28856;
        double r28858 = x_im;
        double r28859 = y_re;
        double r28860 = r28858 * r28859;
        double r28861 = r28857 + r28860;
        return r28861;
}

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