Average Error: 0.0 → 0.0
Time: 12.0s
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 r46390 = x_re;
        double r46391 = y_re;
        double r46392 = r46390 * r46391;
        double r46393 = x_im;
        double r46394 = y_im;
        double r46395 = r46393 * r46394;
        double r46396 = r46392 - r46395;
        return r46396;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r46397 = x_re;
        double r46398 = y_re;
        double r46399 = r46397 * r46398;
        double r46400 = x_im;
        double r46401 = y_im;
        double r46402 = r46400 * r46401;
        double r46403 = r46399 - r46402;
        return r46403;
}

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