Average Error: 0.0 → 0.0
Time: 28.2s
Precision: 64
\[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 r3361947 = x_re;
        double r3361948 = y_re;
        double r3361949 = r3361947 * r3361948;
        double r3361950 = x_im;
        double r3361951 = y_im;
        double r3361952 = r3361950 * r3361951;
        double r3361953 = r3361949 - r3361952;
        return r3361953;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r3361954 = x_re;
        double r3361955 = y_re;
        double r3361956 = r3361954 * r3361955;
        double r3361957 = x_im;
        double r3361958 = y_im;
        double r3361959 = r3361957 * r3361958;
        double r3361960 = r3361956 - r3361959;
        return r3361960;
}

x.re \cdot y.re - x.im \cdot y.im
x.re \cdot y.re - x.im \cdot y.im

Error

Bits error versus x.re

Bits error versus x.im

Bits error versus y.re

Bits error versus y.im

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