Average Error: 0.0 → 0.0
Time: 4.4s
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 r41432 = x_re;
        double r41433 = y_re;
        double r41434 = r41432 * r41433;
        double r41435 = x_im;
        double r41436 = y_im;
        double r41437 = r41435 * r41436;
        double r41438 = r41434 - r41437;
        return r41438;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r41439 = x_re;
        double r41440 = y_re;
        double r41441 = r41439 * r41440;
        double r41442 = x_im;
        double r41443 = y_im;
        double r41444 = r41442 * r41443;
        double r41445 = r41441 - r41444;
        return r41445;
}

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