#define SQUARE(x) (x*x)
may results in a negative value, e.g.
cout << SQUARE(-1-2) << endl;
gets resolved in -1 - 2*-1 - 2
and produces -1
.
It is much better to avoid macros, but if you use this one, make it
#define SQUARE(x) ((x)*(x))
solved Why this piece is outputting NAN (Not a Number)?