Average Error: 0.0 → 0.0
Time: 2.4s
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 r48103 = x_re;
        double r48104 = y_re;
        double r48105 = r48103 * r48104;
        double r48106 = x_im;
        double r48107 = y_im;
        double r48108 = r48106 * r48107;
        double r48109 = r48105 - r48108;
        return r48109;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r48110 = x_re;
        double r48111 = y_re;
        double r48112 = r48110 * r48111;
        double r48113 = x_im;
        double r48114 = y_im;
        double r48115 = r48113 * r48114;
        double r48116 = r48112 - r48115;
        return r48116;
}

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