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;
}
上記のコードを使用してください。私はプログラムのcases.The出力の両方で正確に同じ結果を取得しています符号なし64ビットinteger.Iに二つの異なる二重の値を追加していている私は2つの異なる結果が、それを期待符号なし64ビット値にdouble値を追加すると、奇妙な結果になります。
$./a.out
new length 0x4f56aa5d4b2d8c00
new length 0x4f56aa5d4b2d8c00
下回っショーcase.Iもdouble
new_length = (double)length + 119.000000;
からuint64_t
値型キャストを試してみましたが、されていません。しかし、これはあまりにも問題になるかもしれないものにhelp.Anyの考えに思えないのですか?
[なぜこれは本当ですか?](http://stackoverflow.com/questions/4094117/why-is-this-true) –