Average Error: 0.0 → 0.0
Time: 1.5s
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 r40181 = x_re;
        double r40182 = y_im;
        double r40183 = r40181 * r40182;
        double r40184 = x_im;
        double r40185 = y_re;
        double r40186 = r40184 * r40185;
        double r40187 = r40183 + r40186;
        return r40187;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r40188 = x_re;
        double r40189 = y_im;
        double r40190 = r40188 * r40189;
        double r40191 = x_im;
        double r40192 = y_re;
        double r40193 = r40191 * r40192;
        double r40194 = r40190 + r40193;
        return r40194;
}

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