Average Error: 0.0 → 0.0
Time: 3.5s
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 r2225027 = x_re;
        double r2225028 = y_im;
        double r2225029 = r2225027 * r2225028;
        double r2225030 = x_im;
        double r2225031 = y_re;
        double r2225032 = r2225030 * r2225031;
        double r2225033 = r2225029 + r2225032;
        return r2225033;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2225034 = x_im;
        double r2225035 = y_re;
        double r2225036 = r2225034 * r2225035;
        double r2225037 = x_re;
        double r2225038 = y_im;
        double r2225039 = r2225037 * r2225038;
        double r2225040 = r2225036 + r2225039;
        return r2225040;
}

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