2012-01-05 20 views
23

のIntの範囲を持つ4バイトで+ - 2^31 フロートの範囲が4バイトである+ - 1.2E(+ - 38)浮動小数点および整数両方4バイト?どうして?

フロートは実線で非常に多くのより多くのポイントを包含し、まだですintのサイズに等しい浮動小数点の符号 - 指数 - 分数表現は、この大きさの不一致が生じるほど素晴らしい(またはIntの2の補数なので哀れですか)?何か不足していますか?

実在する行全体を(事実上)表すものがIntegersを表すものと同じサイズであることは非常に驚きです。

答えて

36

さて、ここで簡単に説明です。今日、64ビットシステムに移行すると、あなたの言葉は64ビット、つまり8バイトであり、膨大な数の表現が可能です。あるいは、メモリ内の各ワードが4バイトを占めることを意味する32ビットシステムであってもかまいません。通常、メモリはワード単位でアクセスできます。

intfloatの違いは、メモリ上の物理空間ではなく、ALU(算術論理演算装置)がその番号で動作する方法です。intはバイナリで直接対応する数値を表します(まあ、ほぼ - それはtwo's complement notationを使用します)。他方、floatは、指数形式の数字(すなわち、2.99×10^6は指数形式)を表すために符号化されている(通常IEEE754標準フォーマット)。

あなたの誤解私は浮動小数点がより多くの情報を表すことができると誤解しています。 floatは、大きな数値を表すことができますが、指数のエンコーディングを考慮する必要があるため、正確さで表すことはできません。指数自体はかなり大きい数字になる可能性があります。したがって、浮動小数点数から得られる有効数字の数は少なくなり(情報が少ないことを意味します)、intは整数の範囲を表しますが、数値の大きさははるかに小さくなります。

+0

ありがとうございます。それは本当に役に立ちました。 IEEE 754規格は、偶数自然数の近似の性質についていくつかの点を明らかにする。 –

0

たぶん、あなたはhow floating point numbers are represented in a computer.を学ぶべきです。それは整数の表現方法とは非常に異なっています。

intが常に4バイト長であるとは限りません。システムによって異なります。

+0

フロートは常に4バイトとは限りません。一部の8ビットマイクロコントローラコンパイラでは、24ビットフロートを使用するオプションがあります。 –

0

両方のタイプは、実ライン上の同じ量のポイントを表します。これらのタイプは、ちょうど異なる間隔で配置されています。最も高いフロートと2番目に高いフロートの違いはcaです。 256!

+1

実際には、floatにはNaN値が多いため、実際の行のポイント数は少なくなります。2^24 - 2 = 16'777'214(正確には-2が+/-無限大です)のうち2^23 = 8'388'608は "静かなNaN"と呼ばれています(すべてが同等*と考えられ、したがって多くの値を無駄にします)。残りは「シグナリングNaN」であり、IEEE-754規格に関してはまったく別物ですが、実際に使用することはめったにないため、ほとんどのシステムではそれらが保持する余分な情報(「ペイロード」)は無視されます。フロートには、2つの異なるゼロ(+/- 0が区別されます)もあります。要約:floatはintより16'777'217少ない実数です。 – AnorZaken

1

ここで重要な点は、intが正確であり、浮動小数点が丸められている可能性があると思います。フロート内のデータの一部は小数点の位置を表し、別の部分は値を決定します。だから、あなたは1.2E38を表示することができるかもしれませんが、最初の数桁だけが正しいかもしれませんし、残りは0でいっぱいになるかもしれません。

http://en.wikipedia.org/wiki/Floating_point

"7桁ではほかに1.234567、123456.7、0.000、1234567000000000を表すことができ、そのために"

これは、特定のシステムが山車を実装方法によって異なります。

20

実在する行全体を(事実上)表すものがIntegersを表すものと同じサイズであることは非常に驚きです。

あなたは32ビットintを正確に表すことができ、および32ビットfloatはできない整数がたくさんあることを認識したら、おそらくこれは、それほど意外になります。

floatintよりも少ない明確な数を表現できますが、それらはより広い範囲に広がっています。

連続するfloatsの間隔は、ゼロから離れるにつれて広くなる一方、連続するintsの間は一定であることに留意することも重要です。 int型

、通常はメモリ内に「1ワード」を取るフロート:

+0

私が探していたもの。ありがとうございました ! –

0

スタンダードごとの浮動小数点の基準では、ベース= 10および24桁(精度)ではなく、ベース= 2が必要です。それは基数10ではないので、基数2形式は、実数の明確な集合(実数を表現する際の誤差の本来の理由)のみを表すことができる。これは、以前のように、floatがintに比べてより多くの数値を表現していないことを意味しています。

関連する問題