Average Error: 0.0 → 0.0
Time: 7.8s
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 r2389549 = x_re;
        double r2389550 = y_im;
        double r2389551 = r2389549 * r2389550;
        double r2389552 = x_im;
        double r2389553 = y_re;
        double r2389554 = r2389552 * r2389553;
        double r2389555 = r2389551 + r2389554;
        return r2389555;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2389556 = x_im;
        double r2389557 = y_re;
        double r2389558 = r2389556 * r2389557;
        double r2389559 = x_re;
        double r2389560 = y_im;
        double r2389561 = r2389559 * r2389560;
        double r2389562 = r2389558 + r2389561;
        return r2389562;
}

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