双倍的范围是否比长的更大?
在MSDN上的一篇文章中,它声明double
数据类型的范围是“-1.79769313486232e308 .. 1.79769313486232e308”。 而long
数据类型仅具有“-9,223,372,036,854,775,808 … 9,223,372,036,854,775,807”的范围。 如果两个数据都是64位,那么double
如何保存这么多数据?
http://msdn.microsoft.com/en-us/library/cs7y5x0x(v=vs.90).aspx
可能的双打数量和可能的长数是相同的,它们只是分布不同*。
长的是均匀分布的,而浮子则不是。 你可以在这里阅读更多。
我写了更多,但由于某种原因,光标在我手机上的各个地方跳来跳去。
编辑:这实际上可能更有帮助: http : //en.wikipedia.org/wiki/Double-precision_floating-point_format#section_1
编辑2:这甚至更好: http : //blogs.msdn.com/b/dwayneneed/archive/2010/05/07/fun-with-floating-point.aspx
* 根据该链接,似乎实际上有更多的长点,因为由于NaN和其他特殊数字的表示方式而导致一些双打丢失。
long
是带符号的64位整数值, double
是64位浮点值。 查看他们的FCL类型可能更有意义。 long
映射到System.Int64
并double
映射到System.Double
。
一个简单的答案是double
只能精确到15-16位数,而不是long
(整数类型)在显式数字限制内具有绝对精度 ,在这种情况下为19位。 (请记住, 数字和值在语义上是不同的。)
double
: – / + 0.000,000,000,000,01 to +/- 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
)。