Average Error: 0.0 → 0.0
Time: 38.0s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r7351769 = x_re;
        double r7351770 = y_im;
        double r7351771 = r7351769 * r7351770;
        double r7351772 = x_im;
        double r7351773 = y_re;
        double r7351774 = r7351772 * r7351773;
        double r7351775 = r7351771 + r7351774;
        return r7351775;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r7351776 = x_im;
        double r7351777 = y_re;
        double r7351778 = r7351776 * r7351777;
        double r7351779 = x_re;
        double r7351780 = y_im;
        double r7351781 = r7351779 * r7351780;
        double r7351782 = r7351778 + r7351781;
        return r7351782;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019121 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))