Average Error: 0.0 → 0.0
Time: 12.4s
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 r2701839 = x_re;
        double r2701840 = y_im;
        double r2701841 = r2701839 * r2701840;
        double r2701842 = x_im;
        double r2701843 = y_re;
        double r2701844 = r2701842 * r2701843;
        double r2701845 = r2701841 + r2701844;
        return r2701845;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2701846 = x_im;
        double r2701847 = y_re;
        double r2701848 = r2701846 * r2701847;
        double r2701849 = x_re;
        double r2701850 = y_im;
        double r2701851 = r2701849 * r2701850;
        double r2701852 = r2701848 + r2701851;
        return r2701852;
}

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