Average Error: 0.0 → 0.0
Time: 3.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 r64889 = x_re;
        double r64890 = y_im;
        double r64891 = r64889 * r64890;
        double r64892 = x_im;
        double r64893 = y_re;
        double r64894 = r64892 * r64893;
        double r64895 = r64891 + r64894;
        return r64895;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r64896 = x_re;
        double r64897 = y_im;
        double r64898 = r64896 * r64897;
        double r64899 = x_im;
        double r64900 = y_re;
        double r64901 = r64899 * r64900;
        double r64902 = r64898 + r64901;
        return r64902;
}

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