2

double を 16 進数の定数で初期化したい。

double dbl = 0xFEDCBA9876543212;
printf("dbl: %llX\n", (uint64_t)dbl);

出力として次のように表示されることを期待しています。

dbl: FEDCBA9876543212

しかし、私は得ています:

dbl: FEDCBA9876543000

これはなぜですか? また、最後の 3 バイトが削除されるのはなぜですか?

4

5 に答える 5

4

double を初期化するために 64 ビット値を使用していますが、これは有効な 53 ビットしか保持していません。1 ビットの丸めがあり、残りのビットは単に失われます。

于 2014-09-18T22:17:35.120 に答える
1

double精度は 53 ビットです。そのため、残りの位置でゼロを取得しています。

于 2014-09-18T22:17:10.813 に答える