Average Error: 0.0 → 0.0
Time: 12.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 r2233048 = x_re;
        double r2233049 = y_im;
        double r2233050 = r2233048 * r2233049;
        double r2233051 = x_im;
        double r2233052 = y_re;
        double r2233053 = r2233051 * r2233052;
        double r2233054 = r2233050 + r2233053;
        return r2233054;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2233055 = x_im;
        double r2233056 = y_re;
        double r2233057 = r2233055 * r2233056;
        double r2233058 = x_re;
        double r2233059 = y_im;
        double r2233060 = r2233058 * r2233059;
        double r2233061 = r2233057 + r2233060;
        return r2233061;
}

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