Average Error: 0.0 → 0.0
Time: 3.2s
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 r93441 = x_re;
        double r93442 = y_im;
        double r93443 = r93441 * r93442;
        double r93444 = x_im;
        double r93445 = y_re;
        double r93446 = r93444 * r93445;
        double r93447 = r93443 + r93446;
        return r93447;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r93448 = x_re;
        double r93449 = y_im;
        double r93450 = r93448 * r93449;
        double r93451 = x_im;
        double r93452 = y_re;
        double r93453 = r93451 * r93452;
        double r93454 = r93450 + r93453;
        return r93454;
}

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