Average Error: 0.0 → 0.0
Time: 7.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 r64542 = x_re;
        double r64543 = y_re;
        double r64544 = r64542 * r64543;
        double r64545 = x_im;
        double r64546 = y_im;
        double r64547 = r64545 * r64546;
        double r64548 = r64544 - r64547;
        return r64548;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r64549 = x_re;
        double r64550 = y_re;
        double r64551 = r64549 * r64550;
        double r64552 = x_im;
        double r64553 = y_im;
        double r64554 = r64552 * r64553;
        double r64555 = r64551 - r64554;
        return r64555;
}

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