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 r57722 = x_re;
        double r57723 = y_re;
        double r57724 = r57722 * r57723;
        double r57725 = x_im;
        double r57726 = y_im;
        double r57727 = r57725 * r57726;
        double r57728 = r57724 - r57727;
        return r57728;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r57729 = x_re;
        double r57730 = y_re;
        double r57731 = r57729 * r57730;
        double r57732 = x_im;
        double r57733 = y_im;
        double r57734 = r57732 * r57733;
        double r57735 = r57731 - r57734;
        return r57735;
}

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