倍精度浮動小数点型で表現できない 64 ビットの符号なし整数値はありますか? (double も 64 ビット幅なので、いくつかあるはずです。)もしそうなら、どうすればそれらすべてを計算できますか? (力ずくではない方法で、多分?)
質問する
193 次
3 に答える
1
0 から 2^52 までのすべての整数は正確に表現でき、2^52 から 2^53 までは偶数の整数 (最下位ビット 0) ごとにのみ、次に 4 番目の整数ごとに 2^64-2^12 まで表現できます。
少しのコードで一般化できます
m=52 を取る:
for (i=0; i<(64-m+1); i++) {
start = i ? 1ULL << (i+m) : 0;
end = ((1ULL << m+1)-1) << i;
step = 1ULL << i;
}
生成します:
0000000000000000 to 001fffffffffffff step 1
0020000000000000 to 003ffffffffffffe step 2
0040000000000000 to 007ffffffffffffc step 4
0080000000000000 to 00fffffffffffff8 step 8
0100000000000000 to 01fffffffffffff0 step 16
0200000000000000 to 03ffffffffffffe0 step 32
0400000000000000 to 07ffffffffffffc0 step 64
0800000000000000 to 0fffffffffffff80 step 128
1000000000000000 to 1fffffffffffff00 step 256
2000000000000000 to 3ffffffffffffe00 step 512
4000000000000000 to 7ffffffffffffc00 step 1024
8000000000000000 to fffffffffffff800 step 2048
例 :
double に 0x0020000000000000 を割り当てると、9007199254740992.0 (IEEE754 では 0x0x4340000000000000) が得られます。
double に 0x0020000000000001 を割り当てると、9007199254740992.0 (同じ値) が得られます。
double に 0x0020000000000002 を割り当てると、9007199254740994.0 (0x0x4340000000000001 、次の表現可能な値) が得られます。
于 2013-07-22T09:36:14.353 に答える