Average Error: 0.0 → 0.0
Time: 2.9s
Precision: 64
\[x.re \cdot y.re - x.im \cdot y.im\]
\[x.re \cdot y.re - x.im \cdot y.im\]
x.re \cdot y.re - x.im \cdot y.im
x.re \cdot y.re - x.im \cdot y.im
double f(double x_re, double x_im, double y_re, double y_im) {
        double r61909 = x_re;
        double r61910 = y_re;
        double r61911 = r61909 * r61910;
        double r61912 = x_im;
        double r61913 = y_im;
        double r61914 = r61912 * r61913;
        double r61915 = r61911 - r61914;
        return r61915;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r61916 = x_re;
        double r61917 = y_re;
        double r61918 = r61916 * r61917;
        double r61919 = x_im;
        double r61920 = y_im;
        double r61921 = r61919 * r61920;
        double r61922 = r61918 - r61921;
        return r61922;
}

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.re - x.im \cdot y.im\]
  2. Final simplification0.0

    \[\leadsto x.re \cdot y.re - x.im \cdot y.im\]

Reproduce

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