Average Error: 0.0 → 0.0
Time: 7.9s
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 r44556 = x_re;
        double r44557 = y_im;
        double r44558 = r44556 * r44557;
        double r44559 = x_im;
        double r44560 = y_re;
        double r44561 = r44559 * r44560;
        double r44562 = r44558 + r44561;
        return r44562;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r44563 = x_re;
        double r44564 = y_im;
        double r44565 = r44563 * r44564;
        double r44566 = x_im;
        double r44567 = y_re;
        double r44568 = r44566 * r44567;
        double r44569 = r44565 + r44568;
        return r44569;
}

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