I've read questions like this one, this one, and this one which ask why we use complex numbers instead of real numbers, and that's one half of the question, but the other half, which I've never seen conclusively explained, is why we use complex numbers as a wrapper at all.
From what I understand, there's nothing special about complex numbers in this case; they're simply a container (a struct, for those familiar with programming) for a pair of numbers which describe magnitude an phase.
Is there a mathematical or convenience reason why, traditionally, FFT uses complex number systems for this purpose? Is there a historical aspect to it? Is there any reason why we shouldn't just describe the magnitude and phase as a vector or some other similar structure?
struct Vector2 { public float x; public float y; }
kind of vector. – Polynomial Sep 28 '16 at 10:12