【发布时间】:2011-04-26 08:30:39
【问题描述】:
我可以将int 设置为NaN 吗?如果是,那么如何检查int 是否为NaN?
【问题讨论】:
我可以将int 设置为NaN 吗?如果是,那么如何检查int 是否为NaN?
【问题讨论】:
我认为处理故障最合适的 API 是在您的 api 中返回第二个整数错误代码,例如:
int myfunc(args, int* realReturn);
返回的 int 是错误代码。
前面的输出在调用代码中作为指针传递:
int myInt;
if (myFunc(args, &myInt) != 0) {
//handle error
}
【讨论】:
Nan 没有任何特定的 int 值。人们通常做的是使用一些大整数来表示这个值。如果它是无符号整数,那么它通常使用-1。
【讨论】:
不,NaN 是浮点值。
int 的每个可能值都是一个数字。
标准说:
6.2.6.2 40) 一些填充位组合可能会产生陷阱 表示,例如,如果一个 填充位是奇偶校验位。 无论如何,没有算术运算 有效值可以生成陷阱 代表 不是作为的一部分 特殊情况,例如 溢出,这不会发生 无符号类型。
因此可能存在一些特定于实现的无效整数值,但没有定义生成它们的方法。
【讨论】:
unsigned char 保证没有。
numeric_limits<int>::quiet_NaN(),当然 ;v) 。 — 严肃地说,NaN 不是浮点值,它没有任何值,FP 或其他值。恰好添加到 FP 格式比添加到定点格式更便宜。
quiet_NaN() 将返回0 for int。
Generally (and specifically in the case of C++, to the best of my knowledge): no.
整数 NaN
大多数固定大小的整数格式没有任何方式明确指示无效数据。
【讨论】:
ilogb 使用FP_ILOGB0、INT_MAX 和FP_ILOGBNAN 对来自数学上无效输入的无效结果(int 类型)进行编码。这些是无效的,因为该函数也可能在相同条件下引发FE_INVALID 浮点异常。
不,您不能将 int 设置为 NaN。
【讨论】: