Average Error: 0.0 → 0.0
Time: 8.0s
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 r3631249 = x_re;
        double r3631250 = y_im;
        double r3631251 = r3631249 * r3631250;
        double r3631252 = x_im;
        double r3631253 = y_re;
        double r3631254 = r3631252 * r3631253;
        double r3631255 = r3631251 + r3631254;
        return r3631255;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3631256 = x_re;
        double r3631257 = y_im;
        double r3631258 = r3631256 * r3631257;
        double r3631259 = x_im;
        double r3631260 = y_re;
        double r3631261 = r3631259 * r3631260;
        double r3631262 = r3631258 + r3631261;
        return r3631262;
}

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