Average Error: 0.0 → 0.0
Time: 2.8s
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 r56328 = x_re;
        double r56329 = y_im;
        double r56330 = r56328 * r56329;
        double r56331 = x_im;
        double r56332 = y_re;
        double r56333 = r56331 * r56332;
        double r56334 = r56330 + r56333;
        return r56334;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r56335 = x_re;
        double r56336 = y_im;
        double r56337 = r56335 * r56336;
        double r56338 = x_im;
        double r56339 = y_re;
        double r56340 = r56338 * r56339;
        double r56341 = r56337 + r56340;
        return r56341;
}

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