Average Error: 0.0 → 0.0
Time: 861.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 r56240 = x_re;
        double r56241 = y_im;
        double r56242 = r56240 * r56241;
        double r56243 = x_im;
        double r56244 = y_re;
        double r56245 = r56243 * r56244;
        double r56246 = r56242 + r56245;
        return r56246;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r56247 = x_re;
        double r56248 = y_im;
        double r56249 = r56247 * r56248;
        double r56250 = x_im;
        double r56251 = y_re;
        double r56252 = r56250 * r56251;
        double r56253 = r56249 + r56252;
        return r56253;
}

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)))