Average Error: 0.0 → 0.0
Time: 758.0ms
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 r39303 = x_re;
        double r39304 = y_im;
        double r39305 = r39303 * r39304;
        double r39306 = x_im;
        double r39307 = y_re;
        double r39308 = r39306 * r39307;
        double r39309 = r39305 + r39308;
        return r39309;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r39310 = x_re;
        double r39311 = y_im;
        double r39312 = r39310 * r39311;
        double r39313 = x_im;
        double r39314 = y_re;
        double r39315 = r39313 * r39314;
        double r39316 = r39312 + r39315;
        return r39316;
}

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