Average Error: 0.0 → 0.0
Time: 14.7s
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 r4316559 = x_re;
        double r4316560 = y_im;
        double r4316561 = r4316559 * r4316560;
        double r4316562 = x_im;
        double r4316563 = y_re;
        double r4316564 = r4316562 * r4316563;
        double r4316565 = r4316561 + r4316564;
        return r4316565;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r4316566 = x_im;
        double r4316567 = y_re;
        double r4316568 = r4316566 * r4316567;
        double r4316569 = x_re;
        double r4316570 = y_im;
        double r4316571 = r4316569 * r4316570;
        double r4316572 = r4316568 + r4316571;
        return r4316572;
}

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