Average Error: 0.0 → 0.0
Time: 3.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 r1086145 = x_re;
        double r1086146 = y_re;
        double r1086147 = r1086145 * r1086146;
        double r1086148 = x_im;
        double r1086149 = y_im;
        double r1086150 = r1086148 * r1086149;
        double r1086151 = r1086147 - r1086150;
        return r1086151;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1086152 = x_re;
        double r1086153 = y_re;
        double r1086154 = r1086152 * r1086153;
        double r1086155 = x_im;
        double r1086156 = y_im;
        double r1086157 = r1086155 * r1086156;
        double r1086158 = r1086154 - r1086157;
        return r1086158;
}

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 2019149 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  (- (* x.re y.re) (* x.im y.im)))