Average Error: 0.0 → 0.0
Time: 10.3s
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 r2460791 = x_re;
        double r2460792 = y_im;
        double r2460793 = r2460791 * r2460792;
        double r2460794 = x_im;
        double r2460795 = y_re;
        double r2460796 = r2460794 * r2460795;
        double r2460797 = r2460793 + r2460796;
        return r2460797;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r2460798 = x_im;
        double r2460799 = y_re;
        double r2460800 = r2460798 * r2460799;
        double r2460801 = x_re;
        double r2460802 = y_im;
        double r2460803 = r2460801 * r2460802;
        double r2460804 = r2460800 + r2460803;
        return r2460804;
}

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