Average Error: 0.0 → 0.0
Time: 2.4s
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 r523627 = x_re;
        double r523628 = y_re;
        double r523629 = r523627 * r523628;
        double r523630 = x_im;
        double r523631 = y_im;
        double r523632 = r523630 * r523631;
        double r523633 = r523629 - r523632;
        return r523633;
}

double f(double x_re, double x_im, double y_re, double y_im) {
        double r523634 = x_re;
        double r523635 = y_re;
        double r523636 = r523634 * r523635;
        double r523637 = x_im;
        double r523638 = y_im;
        double r523639 = r523637 * r523638;
        double r523640 = r523636 - r523639;
        return r523640;
}

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