Average Error: 0.0 → 0.0
Time: 4.2s
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 r33497 = x_re;
        double r33498 = y_im;
        double r33499 = r33497 * r33498;
        double r33500 = x_im;
        double r33501 = y_re;
        double r33502 = r33500 * r33501;
        double r33503 = r33499 + r33502;
        return r33503;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r33504 = x_re;
        double r33505 = y_im;
        double r33506 = r33504 * r33505;
        double r33507 = x_im;
        double r33508 = y_re;
        double r33509 = r33507 * r33508;
        double r33510 = r33506 + r33509;
        return r33510;
}

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