Average Error: 0.0 → 0.0
Time: 4.1s
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 r32207 = x_re;
        double r32208 = y_im;
        double r32209 = r32207 * r32208;
        double r32210 = x_im;
        double r32211 = y_re;
        double r32212 = r32210 * r32211;
        double r32213 = r32209 + r32212;
        return r32213;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r32214 = x_re;
        double r32215 = y_im;
        double r32216 = r32214 * r32215;
        double r32217 = x_im;
        double r32218 = y_re;
        double r32219 = r32217 * r32218;
        double r32220 = r32216 + r32219;
        return r32220;
}

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. Simplified0.0

    \[\leadsto \color{blue}{x.im \cdot y.re + x.re \cdot y.im}\]
  3. Final simplification0.0

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

Reproduce

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