Average Error: 0.0 → 0.0
Time: 47.7s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[y.im \cdot x.re + y.re \cdot x.im\]
x.re \cdot y.im + x.im \cdot y.re
y.im \cdot x.re + y.re \cdot x.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2594175 = x_re;
        double r2594176 = y_im;
        double r2594177 = r2594175 * r2594176;
        double r2594178 = x_im;
        double r2594179 = y_re;
        double r2594180 = r2594178 * r2594179;
        double r2594181 = r2594177 + r2594180;
        return r2594181;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2594182 = y_im;
        double r2594183 = x_re;
        double r2594184 = r2594182 * r2594183;
        double r2594185 = y_re;
        double r2594186 = x_im;
        double r2594187 = r2594185 * r2594186;
        double r2594188 = r2594184 + r2594187;
        return r2594188;
}

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

Reproduce

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