Average Error: 0.0 → 0.0
Time: 1.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 r26983 = x_re;
        double r26984 = y_re;
        double r26985 = r26983 * r26984;
        double r26986 = x_im;
        double r26987 = y_im;
        double r26988 = r26986 * r26987;
        double r26989 = r26985 - r26988;
        return r26989;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r26990 = x_re;
        double r26991 = y_re;
        double r26992 = r26990 * r26991;
        double r26993 = x_im;
        double r26994 = y_im;
        double r26995 = r26993 * r26994;
        double r26996 = r26992 - r26995;
        return r26996;
}

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