44

重複の可能性:
Javaでサイズが同じ場合、floatデータ型と整数データ型の違いは何ですか?

ご存知かもしれませんが、これらのタイプはどちらも32ビットです。int整数のみを保持できますが、浮動小数点float数もサポートします(型名が示すように)。

では、の最大値intが2 31であり、の最大値 floatが3.4 * 10 38であり、両方とも32ビットである可能性はありますか?

int浮動小数点数のメモリを節約せず、整数のみを受け入れるため、の最大値容量は浮動小数点数よりも大きくする必要があると思います。その場合は説明させていただきます。

4

4 に答える 4

60

あなたの直感は、どちらも32ビットであるため、一方に他方よりも多くの情報コンテンツが存在することはできないことを非常に正しく示しています。しかし、それは、これらのビットを使用して異なる値を表すことができないという意味ではありません。

2つの新しいデータ型とを発明したuint4としfoo4ます。uint4標準のバイナリ表現では、整数を表すために4ビットを使用するため、次のようになります。

bits   value
0000       0
0001       1
0010       2
...
1111      15

ただし、foo4これらの値を表すために4ビットを使用します。

bits   value
0000       0
0001      42
0010     -97
0011       1
...
1110      pi
1111       e

同じビット数であるにもかかわらず、値の範囲が、よりfoo4もはるかに広くなりました。uint4どのように?で表すことができないuint4値がいくつかあるため、ビットマッピングのそれらの「スロット」は他の値に使用できます。foo4


これはとについても同じです。どちらも232int値のセットからの値をfloat格納できますが、232値のセット異なるだけです。

于 2012-06-22T14:53:06.733 に答える
15

浮動小数点はより高い数値を格納する可能性がありますが、小数点の前の桁でも正確ではありません。次の例を考えてみましょう。

float a = 123456789012345678901234567890f; //30 digits
Console.WriteLine(a);  // 1.234568E+29

精度がほとんど維持されていないことに注意してください。

一方、整数は常にその値の範囲内の任意の数値を正確に格納します。

比較のために、倍精度浮動小数点数を見てみましょう。

double a = 123456789012345678901234567890d; //30 digits
Console.WriteLine(a); // 1.23456789012346E+29

有効数字の約2倍が保持されていることに注意してください。

于 2012-06-22T14:46:20.383 に答える
6

これらはIEEE754浮動小数点仕様に基づいているため、それが可能です。このドキュメントをお読みください。ビット数だけではありません。

于 2012-06-22T14:46:16.320 に答える
4

ヒントは、「浮動小数点」の「浮動」部分にあります。あなたの言うことは基本的に不動点を前提としています。浮動小数点数は、小数点以下の桁の「スペースを予約」しません。桁数が制限されており(23の2進数)、2の累乗で乗算することを記憶しています。

于 2012-06-22T14:51:28.517 に答える