Average Error: 0.0 → 0.0
Time: 5.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 r1375139 = x_re;
        double r1375140 = y_im;
        double r1375141 = r1375139 * r1375140;
        double r1375142 = x_im;
        double r1375143 = y_re;
        double r1375144 = r1375142 * r1375143;
        double r1375145 = r1375141 + r1375144;
        return r1375145;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1375146 = x_im;
        double r1375147 = y_re;
        double r1375148 = r1375146 * r1375147;
        double r1375149 = x_re;
        double r1375150 = y_im;
        double r1375151 = r1375149 * r1375150;
        double r1375152 = r1375148 + r1375151;
        return r1375152;
}

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