Average Error: 0.0 → 0.0
Time: 2.7s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.re \cdot y.im + x.im \cdot y.re\]
x.re \cdot y.im + x.im \cdot y.re
x.re \cdot y.im + x.im \cdot y.re
double f(double x_re, double x_im, double y_re, double y_im) {
        double r110205 = x_re;
        double r110206 = y_im;
        double r110207 = r110205 * r110206;
        double r110208 = x_im;
        double r110209 = y_re;
        double r110210 = r110208 * r110209;
        double r110211 = r110207 + r110210;
        return r110211;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r110212 = x_re;
        double r110213 = y_im;
        double r110214 = r110212 * r110213;
        double r110215 = x_im;
        double r110216 = y_re;
        double r110217 = r110215 * r110216;
        double r110218 = r110214 + r110217;
        return r110218;
}

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.im + x.im \cdot y.re\]
  2. Final simplification0.0

    \[\leadsto x.re \cdot y.im + x.im \cdot y.re\]

Reproduce

herbie shell --seed 2020062 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  :precision binary64
  (+ (* x.re y.im) (* x.im y.re)))