Average Error: 0.0 → 0.0
Time: 47.5s
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 r6827820 = x_re;
        double r6827821 = y_im;
        double r6827822 = r6827820 * r6827821;
        double r6827823 = x_im;
        double r6827824 = y_re;
        double r6827825 = r6827823 * r6827824;
        double r6827826 = r6827822 + r6827825;
        return r6827826;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r6827827 = x_im;
        double r6827828 = y_re;
        double r6827829 = r6827827 * r6827828;
        double r6827830 = x_re;
        double r6827831 = y_im;
        double r6827832 = r6827830 * r6827831;
        double r6827833 = r6827829 + r6827832;
        return r6827833;
}

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