23

double (適切な仮数/指数バランスを持つ、指定されたバイト数の) は、そのバイト数の半分の符号なし整数の範囲を常に完全に正確に保持できますか?

たとえば、8 バイトの double は、4 バイトの unsigned int の数値の範囲を完全に正確に保持できますか?

要するに、2 バイトの float が 1 バイトの unsigned int の範囲を保持できるかどうかです。

もちろん、1 バイトの unsigned int は 0 -> 255 になります。

4

4 に答える 4

44

IEEE754 64 ビット double は、32 ビット整数を表すことができます。これは、精度に使用できる 53 奇数(a)ビットがあり、32 ビット整数に必要なのは 32 だけだからです :-)

(非 IEEE754 倍精度) 64 ビット浮動小数点数の精度が 32 ビット未満であることはもっともらしいでしょう。これにより、(指数のために)非常に大きな数が可能になりますが、精度が犠牲になります。

要するに、浮動小数点数の仮数部の精度のビット数が整数のビット数よりも多い場合 (および指数部のビット数がそれをスケーリングするのに十分なビット数) があれば、精度を失うことなく表現できるということです。


(a)技術的には、精度の 53 番目のビットはシーケンスの開始時に暗示さ1れるため、「可変性」の量は 52 ビットのみである可能性があります。52 であっても 53 であっても、すべての 32 ビット整数を表すのに十分なビットです。

于 2009-04-17T06:08:27.547 に答える
7

はい。float (または double) は、切り捨てる必要のない整数を正確に表すことが保証されています。double の場合、53 ビットの精度があるため、32 ビットの整数を正確に表すには十分であり、(統計的に言えば) 64 ビットの整数の割合もわずかです。

于 2009-04-17T06:09:15.813 に答える
2

正確に表現できる範囲は、実装の多くの要因に依存しますが、指数フィールドが 0 に設定されている場合、整数を正確に表現できる幅は仮数フィールド(符号ビットを想定)。IEEE 754 倍精度の場合、これは 52 ビットの数値を正確に表現できることを意味します。一般に、仮数は構造全体の幅の半分以上になります。

于 2009-04-17T06:09:37.500 に答える
-5

浮動小数点数について話すとき、「完全に正確」という言葉は使いません。しかし、はい、adoubleは 32 ビット整数を表すことができます。

これが当てはまる他の float と int の組み合わせはわかりません。

実際には、マシンがサポートする以上の浮動小数点をわざわざ使用したくないので、bignum を使用した有理演算に切り替えてください。そうすれば、精度が保証されます。

于 2009-04-17T06:08:55.237 に答える