Average Error: 0.0 → 0.0
Time: 6.1s
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 r896825 = x_re;
        double r896826 = y_im;
        double r896827 = r896825 * r896826;
        double r896828 = x_im;
        double r896829 = y_re;
        double r896830 = r896828 * r896829;
        double r896831 = r896827 + r896830;
        return r896831;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r896832 = x_im;
        double r896833 = y_re;
        double r896834 = r896832 * r896833;
        double r896835 = x_re;
        double r896836 = y_im;
        double r896837 = r896835 * r896836;
        double r896838 = r896834 + r896837;
        return r896838;
}

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