Average Error: 0.0 → 0.0
Time: 1.8s
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 r7763251 = x_re;
        double r7763252 = y_im;
        double r7763253 = r7763251 * r7763252;
        double r7763254 = x_im;
        double r7763255 = y_re;
        double r7763256 = r7763254 * r7763255;
        double r7763257 = r7763253 + r7763256;
        return r7763257;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r7763258 = x_im;
        double r7763259 = y_re;
        double r7763260 = r7763258 * r7763259;
        double r7763261 = x_re;
        double r7763262 = y_im;
        double r7763263 = r7763261 * r7763262;
        double r7763264 = r7763260 + r7763263;
        return r7763264;
}

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