Average Error: 0.0 → 0.0
Time: 6.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 r47526 = x_re;
        double r47527 = y_re;
        double r47528 = r47526 * r47527;
        double r47529 = x_im;
        double r47530 = y_im;
        double r47531 = r47529 * r47530;
        double r47532 = r47528 - r47531;
        return r47532;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r47533 = x_re;
        double r47534 = y_re;
        double r47535 = r47533 * r47534;
        double r47536 = x_im;
        double r47537 = y_im;
        double r47538 = r47536 * r47537;
        double r47539 = r47535 - r47538;
        return r47539;
}

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