Average Error: 0.0 → 0.0
Time: 2.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 r39117 = x_re;
        double r39118 = y_re;
        double r39119 = r39117 * r39118;
        double r39120 = x_im;
        double r39121 = y_im;
        double r39122 = r39120 * r39121;
        double r39123 = r39119 - r39122;
        return r39123;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r39124 = x_re;
        double r39125 = y_re;
        double r39126 = r39124 * r39125;
        double r39127 = x_im;
        double r39128 = y_im;
        double r39129 = r39127 * r39128;
        double r39130 = r39126 - r39129;
        return r39130;
}

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