Average Error: 0.0 → 0.0
Time: 11.1s
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 r2072773 = x_re;
        double r2072774 = y_re;
        double r2072775 = r2072773 * r2072774;
        double r2072776 = x_im;
        double r2072777 = y_im;
        double r2072778 = r2072776 * r2072777;
        double r2072779 = r2072775 - r2072778;
        return r2072779;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2072780 = x_re;
        double r2072781 = y_re;
        double r2072782 = r2072780 * r2072781;
        double r2072783 = x_im;
        double r2072784 = y_im;
        double r2072785 = r2072783 * r2072784;
        double r2072786 = r2072782 - r2072785;
        return r2072786;
}

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