Average Error: 0.0 → 0.0
Time: 2.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 r126907 = x_re;
        double r126908 = y_im;
        double r126909 = r126907 * r126908;
        double r126910 = x_im;
        double r126911 = y_re;
        double r126912 = r126910 * r126911;
        double r126913 = r126909 + r126912;
        return r126913;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r126914 = x_re;
        double r126915 = y_im;
        double r126916 = r126914 * r126915;
        double r126917 = x_im;
        double r126918 = y_re;
        double r126919 = r126917 * r126918;
        double r126920 = r126916 + r126919;
        return r126920;
}

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