Average Error: 0.0 → 0.0
Time: 3.9s
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 r35798 = x_re;
        double r35799 = y_im;
        double r35800 = r35798 * r35799;
        double r35801 = x_im;
        double r35802 = y_re;
        double r35803 = r35801 * r35802;
        double r35804 = r35800 + r35803;
        return r35804;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r35805 = x_im;
        double r35806 = y_re;
        double r35807 = r35805 * r35806;
        double r35808 = x_re;
        double r35809 = y_im;
        double r35810 = r35808 * r35809;
        double r35811 = r35807 + r35810;
        return r35811;
}

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