Общеизвестно, что в отличие от целых чисел, числа с плавающей точкой имеют особый внутренний формат хранения. Подробнее см. здесь. Формат этот поддерживается как программно, так и аппаратно, начиная, примерно с 386-процессора. В те времена сопроцессор устанавливался на плату отдельно (и кстати стоил дороже процессора, зараза такая. Хотя на тройках он был зачастую впаян прямо в плату). Легко догадаться что раз есть определенный формат, то завсегда существует некая комбинация, недопустимая для данного формата, в рамках соглашения. Этой комбинацией и является NAN. NAN - это абббревеатурко такое, Not A Number, т.е. - не число.
Обычно возникает, когда переменные забыли проинициализировать и туда записался разный мусор. NAN на самом деле очень серъезная проблема и вот как раз и приводит к зависанию.