NULL is just 0
NaN is nonzero
thus NaN is bigger!
If you are talking about including signed integers though, I'm not sure if NaN has the highest bit set or not. If so, NULL would be bigger :/
NULL isn't just 0.
The value of ((void*)0) that you feed to the compiler is magically transformed into a null pointer constant that is appropriate for the system. NULL can be many different sizes and different values even on a single system. It can simultaneously be 8-bit, 9-bit, 16-bit, 32-bit, 48-bit, 54-bit, 64-bit, 80-bit, and more in order to fill any pointing need. It can simultaneously be all zero-bits and also non-zero. It is very Zen.
The compiler understands the magic and compares your ((void*)0) with the proper form and function of the currently active null pointer constant.
NULL can be various sizes, and can be many different values. While it *MIGHT* just be a 32-bit zero, it can also be many other shapes and sizes. A system with 64-bit pointers in the process may use 64 bits, not just 32, so right there it's already more beefy than a simple float's 32-bit NaN. As you are cross-platform NULL transforms to the size and value appropriate for the device, even when the zero address is a legal address and therefore not valid for NULL. Once you get into kernel programming NULL can be expanded out to 80 bits or more depending on the underlying architecture with a high probability of being non-zero, especially once you add details to the pointer for it's assigned process and/or processor. NaN is just a single numeric constant, but NULL is many different things even within a single context.
NULL > Chuck Norris > NAN.