Average Error: 0.0 → 0.0
Time: 2.3s
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 r653932 = x_re;
        double r653933 = y_re;
        double r653934 = r653932 * r653933;
        double r653935 = x_im;
        double r653936 = y_im;
        double r653937 = r653935 * r653936;
        double r653938 = r653934 - r653937;
        return r653938;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r653939 = x_re;
        double r653940 = y_re;
        double r653941 = r653939 * r653940;
        double r653942 = x_im;
        double r653943 = y_im;
        double r653944 = r653942 * r653943;
        double r653945 = r653941 - r653944;
        return r653945;
}

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