Average Error: 0.0 → 0.0
Time: 733.0ms
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 r57501 = x_re;
        double r57502 = y_re;
        double r57503 = r57501 * r57502;
        double r57504 = x_im;
        double r57505 = y_im;
        double r57506 = r57504 * r57505;
        double r57507 = r57503 - r57506;
        return r57507;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r57508 = x_re;
        double r57509 = y_re;
        double r57510 = r57508 * r57509;
        double r57511 = x_im;
        double r57512 = y_im;
        double r57513 = r57511 * r57512;
        double r57514 = r57510 - r57513;
        return r57514;
}

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