Average Error: 0.0 → 0.0
Time: 1.2s
Precision: 64
\[re \cdot im + im \cdot re\]
\[re \cdot im + im \cdot re\]
re \cdot im + im \cdot re
re \cdot im + im \cdot re
double f(double re, double im) {
        double r3780 = re;
        double r3781 = im;
        double r3782 = r3780 * r3781;
        double r3783 = r3781 * r3780;
        double r3784 = r3782 + r3783;
        return r3784;
}

double f(double re, double im) {
        double r3785 = re;
        double r3786 = im;
        double r3787 = r3785 * r3786;
        double r3788 = r3786 * r3785;
        double r3789 = r3787 + r3788;
        return r3789;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

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

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

Reproduce

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