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 r42778 = x_re;
        double r42779 = y_im;
        double r42780 = r42778 * r42779;
        double r42781 = x_im;
        double r42782 = y_re;
        double r42783 = r42781 * r42782;
        double r42784 = r42780 + r42783;
        return r42784;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r42785 = x_re;
        double r42786 = y_im;
        double r42787 = r42785 * r42786;
        double r42788 = x_im;
        double r42789 = y_re;
        double r42790 = r42788 * r42789;
        double r42791 = r42787 + r42790;
        return r42791;
}

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