23

如果我有 a int,将其转换为 a double,然后将其转换double为a ,int我是否保证获得与开始时相同的值?换句话说,给定这个函数:

int passThroughDouble(int input)
{
  double d = input;
  return d;
}

我能保证passThroughDouble(x) == x所有int的 sx吗?

4

2 回答 2

30

不,不是。该标准没有说明 和 的相对int大小double

如果int是 64 位整数并且double是标准 IEEE 双精度,那么对于大于2^53.


也就是说,int在今天的大多数环境中仍然是 32 位的。所以它在很多情况下仍然成立。

于 2012-12-03T22:59:32.703 回答
12

如果我们将考虑限制为浮点类型的“传统”IEEE-754 样式表示,那么当且仅当该类型的尾数double具有与非类型中的符号位int

经典 IEEE-754double类型的尾数是 53 位宽(包括“隐含”的前导位),这意味着您可以[-2^53, +2^53]精确地表示范围内的整数。超出此范围的所有内容通常都会失去精度。

因此,这完全取决于您intdouble. 答案取决于具体的平台。对于 32 位int和 IEEE-754 double,应该保持相等性。

于 2012-12-04T00:15:58.410 回答