Average Error: 0.0 → 0.0
Time: 1.4s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.im \cdot y.re + x.re \cdot y.im\]
x.re \cdot y.im + x.im \cdot y.re
x.im \cdot y.re + x.re \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r1905079 = x_re;
        double r1905080 = y_im;
        double r1905081 = r1905079 * r1905080;
        double r1905082 = x_im;
        double r1905083 = y_re;
        double r1905084 = r1905082 * r1905083;
        double r1905085 = r1905081 + r1905084;
        return r1905085;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r1905086 = x_im;
        double r1905087 = y_re;
        double r1905088 = r1905086 * r1905087;
        double r1905089 = x_re;
        double r1905090 = y_im;
        double r1905091 = r1905089 * r1905090;
        double r1905092 = r1905088 + r1905091;
        return r1905092;
}

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.im \cdot y.re + x.re \cdot y.im\]

Reproduce

herbie shell --seed 2019158 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  (+ (* x.re y.im) (* x.im y.re)))