Average Error: 0.0 → 0.0
Time: 1.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 r30770 = x_re;
        double r30771 = y_im;
        double r30772 = r30770 * r30771;
        double r30773 = x_im;
        double r30774 = y_re;
        double r30775 = r30773 * r30774;
        double r30776 = r30772 + r30775;
        return r30776;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r30777 = x_re;
        double r30778 = y_im;
        double r30779 = r30777 * r30778;
        double r30780 = x_im;
        double r30781 = y_re;
        double r30782 = r30780 * r30781;
        double r30783 = r30779 + r30782;
        return r30783;
}

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