在MSDN上的文章,它指出double
数据类型具有范围“-1.79769313486232e308 .. 1.79769313486232e308”的。 而long
的数据类型只有一系列“-9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807”的。 一个如何能double
容纳这么多的数据不是long
,如果他们在大小两个64位?
http://msdn.microsoft.com/en-us/library/cs7y5x0x(v=vs.90).aspx
可能双打的数量,以及可能的多头数量是一样的,他们只是不同的分布*。
多头是均匀分布的,而花车都没有。 你可以阅读更多这里 。
我会写更多,但由于某种原因光标跳来跳去都在我的手机上的位置。
编辑:这实际上可能更有帮助: http://en.wikipedia.org/wiki/Double-precision_floating-point_format#section_1
EDIT2:这是更好的: http://blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx
* 根据该链接,它似乎实际上有更多的多头,因为一些双打都失去了应有的NaN和其他特殊号码代表的方式。
long
是有符号的64位整数值和double
是一个64位的浮点值。 看着他们的整箱类型可能会更有意义。 long
映射到System.Int64
和double
映射到System.Double
。
一个简单的回答是, double
只精确到15-16总位数,而不是long
,其中(作为整数型)具有显式数字极限内的绝对精度 ,在此情况下19个数字。 (请记住, 数字和值在语义上的不同。)
double
: - / + 0.000,000,000,000,01至+/- 99,999,999,999,999.9(在100%的准确度,在精度从16位开始的损失,如在“-1.79769313486232e308 .. 1.79769313486232e308”表示)
long
:-9,223,372,036,854,775,808到+9,223,372,036,854,775,807
ulong
:0至18,446,744,073,709,551,615(1余倍长的数字,但相同的值的范围(因为它仅被移位以排除负收益)。
在一般情况下,INT型实数优于浮点十进制值 ,除非你明确需要(无论哪个目的)十进制表示。
此外,你可能知道, 签署优于未签名 ,因为前者是容易出错的要少得多(考虑语句uint i;
,然后i - x;
其中x > i
)。