【发布时间】:2012-03-07 03:43:36
【问题描述】:
int main(int argc, char *argv[])
{
uint64_t length = 0x4f56aa5d4b2d8a80;
uint64_t new_length = 0;
new_length = length + 119.000000;
printf("new length 0x%"PRIx64"\n",new_length);
new_length = length + 238.000000;
printf("new length 0x%"PRIx64"\n",new_length);
return 0;
}
使用上面的代码。我将两个不同的双精度值添加到一个无符号的 64 位整数。在这两种情况下我得到完全相同的结果。程序的输出如下所示
$./a.out
new length 0x4f56aa5d4b2d8c00
new length 0x4f56aa5d4b2d8c00
我希望得到两个不同的结果,但事实并非如此。我还尝试将 uint64_t 值类型转换为 double,如下所示
new_length = (double)length + 119.000000;
但这似乎也没有帮助。你知道可能是什么问题吗?
【问题讨论】:
-
Why is this true?的可能重复
标签: c casting floating-point