Сигнальные NaN - это те, которые имеют в самом значащем разряде своей мантиссы ноль. Остальная мантисса может иметь любое значение. Модуль обработки операций с плавающей точкой никогда не выдает сигнальные NaN как результат, однако он распознает сигнальные NaN при их появлении в качестве операндов. Арифметические операции (как определено в начале этой главы) над сигнальными NaN вызывают исключение недопустимой операции (за исключением операций загрузки из стека FXCH, FCHS и FABS).
Немаскируя исключение недопустимой операции, программист может использовать сигнальные NaN для того, чтобы вызвать обработчик исключений. Этот подход и большие величины значений допустимых NaN дают в руки талантливому программисту инструмент, который может быть применен в широком диапазоне исключений.
Например, компилятор мог бы использовать сигнальные NaN как ссылки на неинициализованные элементы (вещественного) массива. Компилятор мог бы изначально проинициализировать каждый элемент массива сигнальными NaN, мантиссы которых содержали бы индекс (относительную позицию) элемента. Если прикладная программа попытается обратиться к элементу, которые не инициализован, то она получит NaN, помещенное туда компилятором. Если исключение недопустимой операции не было маскировано, произойдет прерывание и будет вызван обработчик исключений. Обработчик исключений смог бы определить, к какому элементу был обращен запрос, так как поля адреса операнда указателей исключения показывали бы на NaN, которое содержит числовой индекс элемента массива.