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 r933903 = x_re;
        double r933904 = y_re;
        double r933905 = r933903 * r933904;
        double r933906 = x_im;
        double r933907 = y_im;
        double r933908 = r933906 * r933907;
        double r933909 = r933905 - r933908;
        return r933909;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r933910 = x_re;
        double r933911 = y_re;
        double r933912 = r933910 * r933911;
        double r933913 = x_im;
        double r933914 = y_im;
        double r933915 = r933913 * r933914;
        double r933916 = r933912 - r933915;
        return r933916;
}

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