Average Error: 0.0 → 0.0
Time: 4.5s
Precision: 64
\[x.re \cdot y.im + x.im \cdot y.re\]
\[x.re \cdot y.im + x.im \cdot y.re\]
x.re \cdot y.im + x.im \cdot y.re
x.re \cdot y.im + x.im \cdot y.re
double f(double x_re, double x_im, double y_re, double y_im) {
        double r49008 = x_re;
        double r49009 = y_im;
        double r49010 = r49008 * r49009;
        double r49011 = x_im;
        double r49012 = y_re;
        double r49013 = r49011 * r49012;
        double r49014 = r49010 + r49013;
        return r49014;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r49015 = x_re;
        double r49016 = y_im;
        double r49017 = r49015 * r49016;
        double r49018 = x_im;
        double r49019 = y_re;
        double r49020 = r49018 * r49019;
        double r49021 = r49017 + r49020;
        return r49021;
}

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.re \cdot y.im + x.im \cdot y.re\]

Reproduce

herbie shell --seed 2020045 
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, imaginary part"
  :precision binary64
  (+ (* x.re y.im) (* x.im y.re)))