C ++中的整数可以是NaN吗?
Posted
技术标签:
【中文标题】C ++中的整数可以是NaN吗?【英文标题】:Can an integer be NaN in C++? 【发布时间】:2011-04-26 08:30:39 【问题描述】:我可以将int
设置为NaN
吗?如果是,那么如何检查int
是否为NaN
?
【问题讨论】:
【参考方案1】:我认为处理故障最合适的 API 是在您的 api 中返回第二个整数错误代码,例如:
int myfunc(args, int* realReturn);
返回的 int 是错误代码。
前面的输出在调用代码中作为指针传递:
int myInt;
if (myFunc(args, &myInt) != 0)
//handle error
【讨论】:
【参考方案2】:Nan 没有任何特定的 int 值。人们通常做的是使用一些大整数来表示这个值。如果它是无符号整数,那么它通常使用-1。
【讨论】:
【参考方案3】:不,NaN 是浮点值。
int
的每个可能值都是一个数字。
编辑
标准说:
6.2.6.2 40) 一些填充位组合可能会产生陷阱 表示,例如,如果一个 填充位是奇偶校验位。 无论如何,没有算术运算 有效值可以生成陷阱 代表 不是作为的一部分 特殊情况,例如 溢出,这不会发生 无符号类型。
因此可能存在一些特定于实现的无效整数值,但没有定义生成它们的方法。
【讨论】:
"int 的每个可能值都是一个数字。"那是标准的一部分,还是只是在实践中总是正确的东西?例如,在 C99 标准中,整数类型可以有陷阱表示。只有unsigned char
保证没有。
@Pascal 陷阱表示不被视为值。 “某些对象表示不需要表示对象类型的值。[...] 这种表示称为陷阱表示。”
@Johannes:我确信 DerKuchen 指的是位模式,而不是对象类型的值。
numeric_limits<int>::quiet_NaN()
,当然 ;v) 。 — 严肃地说,NaN 不是浮点值,它没有任何值,FP 或其他值。恰好添加到 FP 格式比添加到定点格式更便宜。
@Potatoswatter 根据link quiet_NaN()
将返回0
for int
。【参考方案4】:
Generally (and specifically in the case of C++, to the best of my knowledge): no.
整数 NaN
大多数固定大小的整数格式没有任何方式明确指示无效数据。
【讨论】:
嗯,有时它实际上必须。例如,ISO C 的ilogb
使用FP_ILOGB0
、INT_MAX
和FP_ILOGBNAN
对来自数学上无效输入的无效结果(int
类型)进行编码。这些是无效的,因为该函数也可能在相同条件下引发FE_INVALID
浮点异常。【参考方案5】:
不,您不能将 int
设置为 NaN。
【讨论】:
以上是关于C ++中的整数可以是NaN吗?的主要内容,如果未能解决你的问题,请参考以下文章