Average Error: 0.0 → 0.0
Time: 2.5s
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 r104014 = x_re;
        double r104015 = y_im;
        double r104016 = r104014 * r104015;
        double r104017 = x_im;
        double r104018 = y_re;
        double r104019 = r104017 * r104018;
        double r104020 = r104016 + r104019;
        return r104020;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r104021 = x_re;
        double r104022 = y_im;
        double r104023 = r104021 * r104022;
        double r104024 = x_im;
        double r104025 = y_re;
        double r104026 = r104024 * r104025;
        double r104027 = r104023 + r104026;
        return r104027;
}

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