Average Error: 0.0 → 0.0
Time: 963.0ms
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 r26222 = x_re;
        double r26223 = y_im;
        double r26224 = r26222 * r26223;
        double r26225 = x_im;
        double r26226 = y_re;
        double r26227 = r26225 * r26226;
        double r26228 = r26224 + r26227;
        return r26228;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r26229 = x_re;
        double r26230 = y_im;
        double r26231 = r26229 * r26230;
        double r26232 = x_im;
        double r26233 = y_re;
        double r26234 = r26232 * r26233;
        double r26235 = r26231 + r26234;
        return r26235;
}

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