Average Error: 0.0 → 0.0
Time: 7.4s
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 r47310 = x_re;
        double r47311 = y_im;
        double r47312 = r47310 * r47311;
        double r47313 = x_im;
        double r47314 = y_re;
        double r47315 = r47313 * r47314;
        double r47316 = r47312 + r47315;
        return r47316;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47317 = x_re;
        double r47318 = y_im;
        double r47319 = r47317 * r47318;
        double r47320 = x_im;
        double r47321 = y_re;
        double r47322 = r47320 * r47321;
        double r47323 = r47319 + r47322;
        return r47323;
}

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