Average Error: 0.0 → 0.0
Time: 750.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 r43214 = x_re;
        double r43215 = y_im;
        double r43216 = r43214 * r43215;
        double r43217 = x_im;
        double r43218 = y_re;
        double r43219 = r43217 * r43218;
        double r43220 = r43216 + r43219;
        return r43220;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r43221 = x_re;
        double r43222 = y_im;
        double r43223 = r43221 * r43222;
        double r43224 = x_im;
        double r43225 = y_re;
        double r43226 = r43224 * r43225;
        double r43227 = r43223 + r43226;
        return r43227;
}

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