Average Error: 0.0 → 0.0
Time: 1.5s
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 r47048 = x_re;
        double r47049 = y_re;
        double r47050 = r47048 * r47049;
        double r47051 = x_im;
        double r47052 = y_im;
        double r47053 = r47051 * r47052;
        double r47054 = r47050 - r47053;
        return r47054;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47055 = x_re;
        double r47056 = y_re;
        double r47057 = r47055 * r47056;
        double r47058 = x_im;
        double r47059 = y_im;
        double r47060 = r47058 * r47059;
        double r47061 = r47057 - r47060;
        return r47061;
}

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