Average Error: 0.0 → 0.0
Time: 9.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 r2325294 = x_re;
        double r2325295 = y_im;
        double r2325296 = r2325294 * r2325295;
        double r2325297 = x_im;
        double r2325298 = y_re;
        double r2325299 = r2325297 * r2325298;
        double r2325300 = r2325296 + r2325299;
        return r2325300;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2325301 = x_im;
        double r2325302 = y_re;
        double r2325303 = r2325301 * r2325302;
        double r2325304 = x_re;
        double r2325305 = y_im;
        double r2325306 = r2325304 * r2325305;
        double r2325307 = r2325303 + r2325306;
        return r2325307;
}

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