Average Error: 0.0 → 0.0
Time: 4.3s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.re \cdot y.im + x.im \cdot y.re\]
x.re \cdot y.im + x.im \cdot y.re
x.re \cdot y.im + x.im \cdot y.re
double f(double x_re, double x_im, double y_re, double y_im) {
        double r96748 = x_re;
        double r96749 = y_im;
        double r96750 = r96748 * r96749;
        double r96751 = x_im;
        double r96752 = y_re;
        double r96753 = r96751 * r96752;
        double r96754 = r96750 + r96753;
        return r96754;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r96755 = x_re;
        double r96756 = y_im;
        double r96757 = r96755 * r96756;
        double r96758 = x_im;
        double r96759 = y_re;
        double r96760 = r96758 * r96759;
        double r96761 = r96757 + r96760;
        return r96761;
}

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.re \cdot y.im + x.im \cdot y.re\]

Reproduce

herbie shell --seed 2019325 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  :precision binary64
  (+ (* x.re y.im) (* x.im y.re)))