Average Error: 0.0 → 0.0
Time: 3.8s
Precision: 64
\[x.re \cdot y.re - x.im \cdot y.im\]
\[x.re \cdot y.re - x.im \cdot y.im\]
x.re \cdot y.re - x.im \cdot y.im
x.re \cdot y.re - x.im \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1803762 = x_re;
        double r1803763 = y_re;
        double r1803764 = r1803762 * r1803763;
        double r1803765 = x_im;
        double r1803766 = y_im;
        double r1803767 = r1803765 * r1803766;
        double r1803768 = r1803764 - r1803767;
        return r1803768;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1803769 = x_re;
        double r1803770 = y_re;
        double r1803771 = r1803769 * r1803770;
        double r1803772 = x_im;
        double r1803773 = y_im;
        double r1803774 = r1803772 * r1803773;
        double r1803775 = r1803771 - r1803774;
        return r1803775;
}

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.re - x.im \cdot y.im\]
  2. Final simplification0.0

    \[\leadsto x.re \cdot y.re - x.im \cdot y.im\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  (- (* x.re y.re) (* x.im y.im)))