Average Error: 0.0 → 0.0
Time: 3.7s
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 r29810 = x_re;
        double r29811 = y_im;
        double r29812 = r29810 * r29811;
        double r29813 = x_im;
        double r29814 = y_re;
        double r29815 = r29813 * r29814;
        double r29816 = r29812 + r29815;
        return r29816;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r29817 = x_re;
        double r29818 = y_im;
        double r29819 = r29817 * r29818;
        double r29820 = x_im;
        double r29821 = y_re;
        double r29822 = r29820 * r29821;
        double r29823 = r29819 + r29822;
        return r29823;
}

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