Average Error: 0.0 → 0.0
Time: 4.0s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1788924 = x_re;
        double r1788925 = y_im;
        double r1788926 = r1788924 * r1788925;
        double r1788927 = x_im;
        double r1788928 = y_re;
        double r1788929 = r1788927 * r1788928;
        double r1788930 = r1788926 + r1788929;
        return r1788930;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1788931 = x_im;
        double r1788932 = y_re;
        double r1788933 = r1788931 * r1788932;
        double r1788934 = x_re;
        double r1788935 = y_im;
        double r1788936 = r1788934 * r1788935;
        double r1788937 = r1788933 + r1788936;
        return r1788937;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019192 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))