Average Error: 0.0 → 0.0
Time: 3.7s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2781013 = x_re;
        double r2781014 = y_im;
        double r2781015 = r2781013 * r2781014;
        double r2781016 = x_im;
        double r2781017 = y_re;
        double r2781018 = r2781016 * r2781017;
        double r2781019 = r2781015 + r2781018;
        return r2781019;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2781020 = x_im;
        double r2781021 = y_re;
        double r2781022 = r2781020 * r2781021;
        double r2781023 = x_re;
        double r2781024 = y_im;
        double r2781025 = r2781023 * r2781024;
        double r2781026 = r2781022 + r2781025;
        return r2781026;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019163 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))