Average Error: 0.0 → 0.0
Time: 1.2s
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 r28484 = x_re;
        double r28485 = y_re;
        double r28486 = r28484 * r28485;
        double r28487 = x_im;
        double r28488 = y_im;
        double r28489 = r28487 * r28488;
        double r28490 = r28486 - r28489;
        return r28490;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r28491 = x_re;
        double r28492 = y_re;
        double r28493 = r28491 * r28492;
        double r28494 = x_im;
        double r28495 = y_im;
        double r28496 = r28494 * r28495;
        double r28497 = r28493 - r28496;
        return r28497;
}

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 2019323 +o rules:numerics
(FPCore (x.re x.im y.re y.im)
  :name "_multiplyComplex, real part"
  :precision binary64
  (- (* x.re y.re) (* x.im y.im)))