Average Error: 0.0 → 0.0
Time: 2.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 r110514 = x_re;
        double r110515 = y_re;
        double r110516 = r110514 * r110515;
        double r110517 = x_im;
        double r110518 = y_im;
        double r110519 = r110517 * r110518;
        double r110520 = r110516 - r110519;
        return r110520;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r110521 = x_re;
        double r110522 = y_re;
        double r110523 = r110521 * r110522;
        double r110524 = x_im;
        double r110525 = y_im;
        double r110526 = r110524 * r110525;
        double r110527 = r110523 - r110526;
        return r110527;
}

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