2009-10-17 14 views
7

long型とdouble型の.NETサイズは8バイトであることが知られています。しかし、doubleはlongよりかなり大きな数を格納できます。小数点以下の桁にデータを格納する必要があることを考慮すると、どうすればよいでしょうか?最大値と.NETのlong型とdouble型のサイズ

質問のバージョン短い:

Math.Pow(2、64)== long.MaxValue Math.Pow(2、64)< double.MaxValue

+0

倍精度の精度が小数点以下です。 –

+0

http://en.wikipedia.org/wiki/Double_precision –

+0

http://ja.wikipedia.org/wiki/Floating_point#Range_of_floating-point_numbers –

答えて

17

短い答えは、二重のみ保存します最も重要な数字であり、数字に含まれる可能性のある数字のすべてではありません。例えばdouble> maxの値をlongにすると、小数点の後の数字やdeciamlポイントのちょうど左側の数字の情報は保存されません。すべての詳細については

What every computer scientist should know about Floating-Point Arithmetic

+1

誰もが理解できるように簡単に説明されています:) – Konstantin

+0

私はこのテキストを初めて使用しましたそれは本当に役立つことが分かった。 – LJM

0

はダブル浮動小数点数をされて参照してください。それは二重に保存された番号が大きくなるにつれて、それはbeeing rounedであり、最も重要でない部分は解雇されているという基本的なメアムを嫌う。

たとえば、1000億のような数字がある場合は、2倍になります。 それは正確に100 000 000 000かもしれないし、100 000 000 000 000 000 000 000 000

+0

これは間違いではありませんが、doubleがintまたはlongよりも大きな範囲を持つ主な理由、つまり、仮数と指数で表現される浮動小数点数であるという主な理由は除外されています。 –

1

整数型の範囲は-2 ^(n-1)2 ... 2 ^(n -1)-1(符号付き)、 または0 ... 2^n-1(符号なし)。

固定小数点変数は定数ベースの型と同じですが、固定係数は(0.01:0.01 *(0 ... 2^n-1)など)定数のみです。

任意の言語の浮動小数点変数(浮動小数点数および倍精度浮動小数点数)は指数に数ビットを使用し、残りは指数の前の数値に使用します。それらはあまり正確ではありません(x + 1はxに等しいかもしれません、xは非常に大きな数です)。

+1

Btw、「指数の前の数」は仮数または(より良い)仮数と呼ばれ、http://en.wikipedia.org/wiki/Significandを参照してください。 –

関連する問題