double を 16 進数の定数で初期化したい。
double dbl = 0xFEDCBA9876543212;
printf("dbl: %llX\n", (uint64_t)dbl);
出力として次のように表示されることを期待しています。
dbl: FEDCBA9876543212
しかし、私は得ています:
dbl: FEDCBA9876543000
これはなぜですか? また、最後の 3 バイトが削除されるのはなぜですか?
double を初期化するために 64 ビット値を使用していますが、これは有効な 53 ビットしか保持していません。1 ビットの丸めがあり、残りのビットは単に失われます。
double
精度は 53 ビットです。そのため、残りの位置でゼロを取得しています。