Average Error: 0.0 → 0.0
Time: 646.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 r36991 = x_re;
        double r36992 = y_im;
        double r36993 = r36991 * r36992;
        double r36994 = x_im;
        double r36995 = y_re;
        double r36996 = r36994 * r36995;
        double r36997 = r36993 + r36996;
        return r36997;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r36998 = x_re;
        double r36999 = y_im;
        double r37000 = r36998 * r36999;
        double r37001 = x_im;
        double r37002 = y_re;
        double r37003 = r37001 * r37002;
        double r37004 = r37000 + r37003;
        return r37004;
}

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