如果我有一个int,将其转换为一个double,然后转换double回的int,我保证可以得到相同的值返回,我开始?换句话说,给定此功能:
int passThroughDouble(int input)
{
double d = input;
return d;
}
Run Code Online (Sandbox Code Playgroud)
我能保证passThroughDouble(x) == x所有int的x吗?
Mys*_*ial 30
不,不是.该标准没有提到的相对大小int和double.
如果int是64位整数并且double是标准IEEE双精度,那么对于大于的数字,它将已经失败2^53.
也就是说,int在今天的大多数环境中仍然是32位.所以在很多情况下它仍然会存在.
AnT*_*AnT 12
如果我们将考虑限制在浮点类型的"传统"IEEE-754样式表示中,那么当且仅当该类型的尾数double具有与非存在一样多的位时,您可以期望该转换是值保持的.类型中的符号位int.
经典IEEE-754 double类型的尾数是53位宽(包括"隐含"前导位),这意味着您可以[-2^53, +2^53]精确地表示范围内的整数.超出此范围的所有内容通常都会失去精确度.
所以,这一切都取决于你int与你的相比有多宽double.答案取决于具体的平台.对于32位int和IEEE-754 double,平等应该成立.
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |