Average Error: 0.0 → 0.0
Time: 3.4s
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 r1619143 = x_re;
        double r1619144 = y_re;
        double r1619145 = r1619143 * r1619144;
        double r1619146 = x_im;
        double r1619147 = y_im;
        double r1619148 = r1619146 * r1619147;
        double r1619149 = r1619145 - r1619148;
        return r1619149;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1619150 = x_re;
        double r1619151 = y_re;
        double r1619152 = r1619150 * r1619151;
        double r1619153 = x_im;
        double r1619154 = y_im;
        double r1619155 = r1619153 * r1619154;
        double r1619156 = r1619152 - r1619155;
        return r1619156;
}

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