Average Error: 0.0 → 0.0
Time: 5.9s
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 r35106 = x_re;
        double r35107 = y_re;
        double r35108 = r35106 * r35107;
        double r35109 = x_im;
        double r35110 = y_im;
        double r35111 = r35109 * r35110;
        double r35112 = r35108 - r35111;
        return r35112;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r35113 = x_re;
        double r35114 = y_re;
        double r35115 = r35113 * r35114;
        double r35116 = x_im;
        double r35117 = y_im;
        double r35118 = r35116 * r35117;
        double r35119 = r35115 - r35118;
        return r35119;
}

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