Average Error: 0.0 → 0.0
Time: 5.4s
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 r1938420 = x_re;
        double r1938421 = y_im;
        double r1938422 = r1938420 * r1938421;
        double r1938423 = x_im;
        double r1938424 = y_re;
        double r1938425 = r1938423 * r1938424;
        double r1938426 = r1938422 + r1938425;
        return r1938426;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1938427 = x_im;
        double r1938428 = y_re;
        double r1938429 = r1938427 * r1938428;
        double r1938430 = x_re;
        double r1938431 = y_im;
        double r1938432 = r1938430 * r1938431;
        double r1938433 = r1938429 + r1938432;
        return r1938433;
}

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