Average Error: 0.0 → 0.0
Time: 12.3s
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 r2509819 = x_re;
        double r2509820 = y_im;
        double r2509821 = r2509819 * r2509820;
        double r2509822 = x_im;
        double r2509823 = y_re;
        double r2509824 = r2509822 * r2509823;
        double r2509825 = r2509821 + r2509824;
        return r2509825;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2509826 = x_im;
        double r2509827 = y_re;
        double r2509828 = r2509826 * r2509827;
        double r2509829 = x_re;
        double r2509830 = y_im;
        double r2509831 = r2509829 * r2509830;
        double r2509832 = r2509828 + r2509831;
        return r2509832;
}

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