Average Error: 0.0 → 0.0
Time: 13.8s
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 r2855634 = x_re;
        double r2855635 = y_im;
        double r2855636 = r2855634 * r2855635;
        double r2855637 = x_im;
        double r2855638 = y_re;
        double r2855639 = r2855637 * r2855638;
        double r2855640 = r2855636 + r2855639;
        return r2855640;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2855641 = x_im;
        double r2855642 = y_re;
        double r2855643 = r2855641 * r2855642;
        double r2855644 = x_re;
        double r2855645 = y_im;
        double r2855646 = r2855644 * r2855645;
        double r2855647 = r2855643 + r2855646;
        return r2855647;
}

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