Average Error: 0.0 → 0.0
Time: 3.8s
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 r116681 = x_re;
        double r116682 = y_re;
        double r116683 = r116681 * r116682;
        double r116684 = x_im;
        double r116685 = y_im;
        double r116686 = r116684 * r116685;
        double r116687 = r116683 - r116686;
        return r116687;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r116688 = x_re;
        double r116689 = y_re;
        double r116690 = r116688 * r116689;
        double r116691 = x_im;
        double r116692 = y_im;
        double r116693 = r116691 * r116692;
        double r116694 = r116690 - r116693;
        return r116694;
}

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 2019362 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  :precision binary64
  (- (* x.re y.re) (* x.im y.im)))