Average Error: 0.0 → 0.0
Time: 1.6s
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 r18875 = x_re;
        double r18876 = y_re;
        double r18877 = r18875 * r18876;
        double r18878 = x_im;
        double r18879 = y_im;
        double r18880 = r18878 * r18879;
        double r18881 = r18877 - r18880;
        return r18881;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r18882 = x_re;
        double r18883 = y_re;
        double r18884 = r18882 * r18883;
        double r18885 = x_im;
        double r18886 = y_im;
        double r18887 = r18885 * r18886;
        double r18888 = r18884 - r18887;
        return r18888;
}

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