Average Error: 0.0 → 0.0
Time: 669.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 r44154 = x_re;
        double r44155 = y_im;
        double r44156 = r44154 * r44155;
        double r44157 = x_im;
        double r44158 = y_re;
        double r44159 = r44157 * r44158;
        double r44160 = r44156 + r44159;
        return r44160;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r44161 = x_re;
        double r44162 = y_im;
        double r44163 = r44161 * r44162;
        double r44164 = x_im;
        double r44165 = y_re;
        double r44166 = r44164 * r44165;
        double r44167 = r44163 + r44166;
        return r44167;
}

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