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;
但这似乎也没有帮助。有什么想法,可能是问题出在哪里?