Average Error: 0.0 → 0.0
Time: 1.3s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r2501326 = x_re;
        double r2501327 = y_im;
        double r2501328 = r2501326 * r2501327;
        double r2501329 = x_im;
        double r2501330 = y_re;
        double r2501331 = r2501329 * r2501330;
        double r2501332 = r2501328 + r2501331;
        return r2501332;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2501333 = x_im;
        double r2501334 = y_re;
        double r2501335 = r2501333 * r2501334;
        double r2501336 = x_re;
        double r2501337 = y_im;
        double r2501338 = r2501336 * r2501337;
        double r2501339 = r2501335 + r2501338;
        return r2501339;
}

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

Reproduce

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