Average Error: 0.0 → 0.0
Time: 8.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 r2219410 = x_re;
        double r2219411 = y_im;
        double r2219412 = r2219410 * r2219411;
        double r2219413 = x_im;
        double r2219414 = y_re;
        double r2219415 = r2219413 * r2219414;
        double r2219416 = r2219412 + r2219415;
        return r2219416;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2219417 = x_im;
        double r2219418 = y_re;
        double r2219419 = r2219417 * r2219418;
        double r2219420 = x_re;
        double r2219421 = y_im;
        double r2219422 = r2219420 * r2219421;
        double r2219423 = r2219419 + r2219422;
        return r2219423;
}

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