Average Error: 0.0 → 0.0
Time: 4.2s
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 r44836 = x_re;
        double r44837 = y_re;
        double r44838 = r44836 * r44837;
        double r44839 = x_im;
        double r44840 = y_im;
        double r44841 = r44839 * r44840;
        double r44842 = r44838 - r44841;
        return r44842;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r44843 = x_re;
        double r44844 = y_re;
        double r44845 = r44843 * r44844;
        double r44846 = x_im;
        double r44847 = y_im;
        double r44848 = r44846 * r44847;
        double r44849 = r44845 - r44848;
        return r44849;
}

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 2019325 +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)))