Average Error: 0.0 → 0.0
Time: 4.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 r28090 = x_re;
        double r28091 = y_re;
        double r28092 = r28090 * r28091;
        double r28093 = x_im;
        double r28094 = y_im;
        double r28095 = r28093 * r28094;
        double r28096 = r28092 - r28095;
        return r28096;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r28097 = x_re;
        double r28098 = y_re;
        double r28099 = r28097 * r28098;
        double r28100 = x_im;
        double r28101 = y_im;
        double r28102 = r28100 * r28101;
        double r28103 = r28099 - r28102;
        return r28103;
}

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