Average Error: 0.0 → 0.0
Time: 2.3s
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 r46233 = x_re;
        double r46234 = y_re;
        double r46235 = r46233 * r46234;
        double r46236 = x_im;
        double r46237 = y_im;
        double r46238 = r46236 * r46237;
        double r46239 = r46235 - r46238;
        return r46239;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r46240 = x_re;
        double r46241 = y_re;
        double r46242 = r46240 * r46241;
        double r46243 = x_im;
        double r46244 = y_im;
        double r46245 = r46243 * r46244;
        double r46246 = r46242 - r46245;
        return r46246;
}

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