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 r54867 = x_re;
        double r54868 = y_re;
        double r54869 = r54867 * r54868;
        double r54870 = x_im;
        double r54871 = y_im;
        double r54872 = r54870 * r54871;
        double r54873 = r54869 - r54872;
        return r54873;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r54874 = x_re;
        double r54875 = y_re;
        double r54876 = r54874 * r54875;
        double r54877 = x_im;
        double r54878 = y_im;
        double r54879 = r54877 * r54878;
        double r54880 = r54876 - r54879;
        return r54880;
}

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