Average Error: 0.0 → 0.0
Time: 833.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 r66088 = x_re;
        double r66089 = y_im;
        double r66090 = r66088 * r66089;
        double r66091 = x_im;
        double r66092 = y_re;
        double r66093 = r66091 * r66092;
        double r66094 = r66090 + r66093;
        return r66094;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r66095 = x_re;
        double r66096 = y_im;
        double r66097 = r66095 * r66096;
        double r66098 = x_im;
        double r66099 = y_re;
        double r66100 = r66098 * r66099;
        double r66101 = r66097 + r66100;
        return r66101;
}

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