Average Error: 0.0 → 0.0
Time: 3.2s
Precision: 64
\[re \cdot im + im \cdot re\]
\[re \cdot im + re \cdot im\]
double f(double re, double im) {
        double r63899 = re;
        double r63900 = im;
        double r63901 = r63899 * r63900;
        double r63902 = r63900 * r63899;
        double r63903 = r63901 + r63902;
        return r63903;
}

double f(double re, double im) {
        double r63904 = re;
        double r63905 = im;
        double r63906 = r63904 * r63905;
        double r63907 = r63906 + r63906;
        return r63907;
}

re \cdot im + im \cdot re
re \cdot im + re \cdot im

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 0.0

    \[re \cdot im + im \cdot re\]
  2. Final simplification0.0

    \[\leadsto re \cdot im + re \cdot im\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (re im)
  :name "math.square on complex, imaginary part"
  (+ (* re im) (* im re)))