Могу ли я установить int
на NaN
? Если да, то как я могу проверить, является ли int
NaN
или нет?
Может ли целое число быть NaN в С++?
Ответы (5)
Нет, NaN — это значение с плавающей запятой.
Каждое возможное значение int
является числом.
Редактировать
Стандарт говорит:
6.2.6.2 40) Некоторые комбинации битов заполнения могут генерировать представления прерываний, например, если один бит заполнения является битом четности. Несмотря на это, никакая арифметическая операция над допустимыми значениями не может генерировать представление прерывания, кроме как в рамках исключительного условия, такого как переполнение, и это не может произойти с беззнаковыми типами.
Таким образом, могут существовать недопустимые целочисленные значения, специфичные для конкретной реализации, но не существует определенного способа их создания.
unsigned char
гарантированно их нет.
- person Pascal Cuoq; 16.10.2010
numeric_limits<int>::quiet_NaN()
, конечно ;v) . — А если серьезно, NaN — это не значение с плавающей запятой, это отсутствие какого-либо значения, FP или чего-то еще. Просто добавление к формату FP оказывается дешевле, чем к формату с фиксированной точкой.
- person Potatoswatter; 20.10.2010
В целом (и, насколько мне известно, конкретно в случае C++): нет .
Целое число NaN
Большинство целочисленных форматов фиксированного размера не имеют возможности явно указывать недопустимые данные.
Я думаю, что наиболее правильный API для обработки сбоев - это вернуть второй целочисленный код ошибки в ваш API, например:
int myfunc(args, int* realReturn);
Возвращаемый int является кодом ошибки.
Предыдущий вывод передается как указатель в вызывающем коде:
int myInt;
if (myFunc(args, &myInt) != 0) {
//handle error
}
У вас нет какого-либо определенного значения int как Nan. Обычно люди используют некоторое большое целое число для представления этого значения. ЕСЛИ это беззнаковое целое, то обычно используется -1.
Нет, вы не можете установить int
в NaN.