Average Error: 0.0 → 0.0
Time: 2.1s
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 r57065 = x_re;
        double r57066 = y_im;
        double r57067 = r57065 * r57066;
        double r57068 = x_im;
        double r57069 = y_re;
        double r57070 = r57068 * r57069;
        double r57071 = r57067 + r57070;
        return r57071;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r57072 = x_re;
        double r57073 = y_im;
        double r57074 = r57072 * r57073;
        double r57075 = x_im;
        double r57076 = y_re;
        double r57077 = r57075 * r57076;
        double r57078 = r57074 + r57077;
        return r57078;
}

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)))