Average Error: 0.0 → 0.0
Time: 1.2s
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 r729383 = x_re;
        double r729384 = y_im;
        double r729385 = r729383 * r729384;
        double r729386 = x_im;
        double r729387 = y_re;
        double r729388 = r729386 * r729387;
        double r729389 = r729385 + r729388;
        return r729389;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r729390 = x_im;
        double r729391 = y_re;
        double r729392 = r729390 * r729391;
        double r729393 = x_re;
        double r729394 = y_im;
        double r729395 = r729393 * r729394;
        double r729396 = r729392 + r729395;
        return r729396;
}

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