Average Error: 0.0 → 0.0
Time: 1.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 r1119502 = x_re;
        double r1119503 = y_re;
        double r1119504 = r1119502 * r1119503;
        double r1119505 = x_im;
        double r1119506 = y_im;
        double r1119507 = r1119505 * r1119506;
        double r1119508 = r1119504 - r1119507;
        return r1119508;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1119509 = x_re;
        double r1119510 = y_re;
        double r1119511 = r1119509 * r1119510;
        double r1119512 = x_im;
        double r1119513 = y_im;
        double r1119514 = r1119512 * r1119513;
        double r1119515 = r1119511 - r1119514;
        return r1119515;
}

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 2019179 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  (- (* x.re y.re) (* x.im y.im)))