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