Average Error: 0.0 → 0.0
Time: 10.6s
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 r2626491 = x_re;
        double r2626492 = y_im;
        double r2626493 = r2626491 * r2626492;
        double r2626494 = x_im;
        double r2626495 = y_re;
        double r2626496 = r2626494 * r2626495;
        double r2626497 = r2626493 + r2626496;
        return r2626497;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2626498 = x_im;
        double r2626499 = y_re;
        double r2626500 = r2626498 * r2626499;
        double r2626501 = x_re;
        double r2626502 = y_im;
        double r2626503 = r2626501 * r2626502;
        double r2626504 = r2626500 + r2626503;
        return r2626504;
}

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