Average Error: 0.0 → 0.0
Time: 10.2s
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 r1240969 = x_re;
        double r1240970 = y_im;
        double r1240971 = r1240969 * r1240970;
        double r1240972 = x_im;
        double r1240973 = y_re;
        double r1240974 = r1240972 * r1240973;
        double r1240975 = r1240971 + r1240974;
        return r1240975;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1240976 = x_im;
        double r1240977 = y_re;
        double r1240978 = r1240976 * r1240977;
        double r1240979 = x_re;
        double r1240980 = y_im;
        double r1240981 = r1240979 * r1240980;
        double r1240982 = r1240978 + r1240981;
        return r1240982;
}

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