Какие исключения с плавающей запятой делают NaN?

#c #floating-point #c 17 #nan #floating-point-exceptions

Вопрос:

Из пяти категорий исключений с плавающей запятой, определенных в C , а именно:

  1. FE_INEXACT
  2. FE_DIVBYZERO
  3. FE_UNDERFLOW
  4. FE_OVERFLOW
  5. FE_INVALID

…что из этого может привести к NaN значению?

Кроме того, существуют ли какие — либо операции, которые могут привести к NaN значению, но не вызвать одно из этих исключений?

Комментарии:

1. Что касается вашего второго вопроса, есть перегрузка, для quiet_NaN которой нет исключения (на самом деле единственная со времен C 11): en.cppreference.com/w/cpp/types/numeric_limits/quiet_NaN

2. @Jose: Я не думаю noexcept , что это имеет отношение к делу. Исключения с плавающей запятой и обычные исключения C не связаны.

3. Возможно, вам захочется уточнить, имеете ли вы в виду расплывчатые гарантии, предоставляемые стандартом C , или более строгие гарантии тех, которые утверждают is_iec559 .

4. @Sneftel: Ответ на каждый из этих двух случаев будет приветствоваться.

5. Это не два случая, это один случай и тысяча других случаев.