Average Error: 0.0 → 0.0
Time: 9.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 r1440991 = x_re;
        double r1440992 = y_im;
        double r1440993 = r1440991 * r1440992;
        double r1440994 = x_im;
        double r1440995 = y_re;
        double r1440996 = r1440994 * r1440995;
        double r1440997 = r1440993 + r1440996;
        return r1440997;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1440998 = x_im;
        double r1440999 = y_re;
        double r1441000 = r1440998 * r1440999;
        double r1441001 = x_re;
        double r1441002 = y_im;
        double r1441003 = r1441001 * r1441002;
        double r1441004 = r1441000 + r1441003;
        return r1441004;
}

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