Average Error: 0.0 → 0.0
Time: 11.6s
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 r124089 = x_re;
        double r124090 = y_re;
        double r124091 = r124089 * r124090;
        double r124092 = x_im;
        double r124093 = y_im;
        double r124094 = r124092 * r124093;
        double r124095 = r124091 - r124094;
        return r124095;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r124096 = x_re;
        double r124097 = y_re;
        double r124098 = r124096 * r124097;
        double r124099 = x_im;
        double r124100 = y_im;
        double r124101 = r124099 * r124100;
        double r124102 = r124098 - r124101;
        return r124102;
}

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