Average Error: 0.0 → 0.0
Time: 1.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 r8355 = x_re;
        double r8356 = y_im;
        double r8357 = r8355 * r8356;
        double r8358 = x_im;
        double r8359 = y_re;
        double r8360 = r8358 * r8359;
        double r8361 = r8357 + r8360;
        return r8361;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r8362 = x_re;
        double r8363 = y_im;
        double r8364 = r8362 * r8363;
        double r8365 = x_im;
        double r8366 = y_re;
        double r8367 = r8365 * r8366;
        double r8368 = r8364 + r8367;
        return r8368;
}

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