如果我有 a int
,将其转换为 a double
,然后将其转换double
为a ,int
我是否保证获得与开始时相同的值?换句话说,给定这个函数:
int passThroughDouble(int input)
{
double d = input;
return d;
}
我能保证passThroughDouble(x) == x
所有int
的 sx
吗?
不,不是。该标准没有说明 和 的相对int
大小double
。
如果int
是 64 位整数并且double
是标准 IEEE 双精度,那么对于大于2^53
.
也就是说,int
在今天的大多数环境中仍然是 32 位的。所以它在很多情况下仍然成立。
如果我们将考虑限制为浮点类型的“传统”IEEE-754 样式表示,那么当且仅当该类型的尾数double
具有与非类型中的符号位int
。
经典 IEEE-754double
类型的尾数是 53 位宽(包括“隐含”的前导位),这意味着您可以[-2^53, +2^53]
精确地表示范围内的整数。超出此范围的所有内容通常都会失去精度。
因此,这完全取决于您int
与double
. 答案取决于具体的平台。对于 32 位int
和 IEEE-754 double
,应该保持相等性。