Average Error: 0.0 → 0.0
Time: 1.3s
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 r702591 = x_re;
        double r702592 = y_re;
        double r702593 = r702591 * r702592;
        double r702594 = x_im;
        double r702595 = y_im;
        double r702596 = r702594 * r702595;
        double r702597 = r702593 - r702596;
        return r702597;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r702598 = x_re;
        double r702599 = y_re;
        double r702600 = r702598 * r702599;
        double r702601 = x_im;
        double r702602 = y_im;
        double r702603 = r702601 * r702602;
        double r702604 = r702600 - r702603;
        return r702604;
}

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