В какой книге написано про nan? По стандарту C++ деление на ноль -
это неопределенное поведение:
If the second operand is zero, the behavior is undefined,
Правда, есть одно исключение:
except that if floating-point division is taking place and the type supports IEEE floating-point arithmetic
Вот только этот стандарт IEEE 754 не постулируется стандартом C++ (потому что зависит от аппаратной реализации чисел с плавающей запятой).
Какие-то компиляторы с каким-то уровнем оптимизации могут действительно выдавать nan. Но не все и не всегда.