Average Error: 0.0 → 0.0
Time: 4.1s
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 r2408305 = x_re;
        double r2408306 = y_im;
        double r2408307 = r2408305 * r2408306;
        double r2408308 = x_im;
        double r2408309 = y_re;
        double r2408310 = r2408308 * r2408309;
        double r2408311 = r2408307 + r2408310;
        return r2408311;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2408312 = x_im;
        double r2408313 = y_re;
        double r2408314 = r2408312 * r2408313;
        double r2408315 = x_re;
        double r2408316 = y_im;
        double r2408317 = r2408315 * r2408316;
        double r2408318 = r2408314 + r2408317;
        return r2408318;
}

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