Average Error: 0.0 → 0.0
Time: 3.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 r40664 = x_re;
        double r40665 = y_re;
        double r40666 = r40664 * r40665;
        double r40667 = x_im;
        double r40668 = y_im;
        double r40669 = r40667 * r40668;
        double r40670 = r40666 - r40669;
        return r40670;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r40671 = x_re;
        double r40672 = y_re;
        double r40673 = r40671 * r40672;
        double r40674 = x_im;
        double r40675 = y_im;
        double r40676 = r40674 * r40675;
        double r40677 = r40673 - r40676;
        return r40677;
}

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