Average Error: 0.0 → 0.0
Time: 7.1s
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 r42975 = x_re;
        double r42976 = y_re;
        double r42977 = r42975 * r42976;
        double r42978 = x_im;
        double r42979 = y_im;
        double r42980 = r42978 * r42979;
        double r42981 = r42977 - r42980;
        return r42981;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r42982 = x_re;
        double r42983 = y_re;
        double r42984 = r42982 * r42983;
        double r42985 = x_im;
        double r42986 = y_im;
        double r42987 = r42985 * r42986;
        double r42988 = r42984 - r42987;
        return r42988;
}

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