双倍的范围是多长吗?

时间:2012-10-23 00:33:46

标签: c# types size

在MSDN上的一篇文章中,它指出double数据类型的范围是“-1.79769313486232e308 .. 1.79769313486232e308”。而long数据类型的范围仅为“-9,223,372,036,854,775,808 ... 9,223,372,036,854,775,807”。 double如果它们的大小都是64位,那么如何能够保存比long更多的数据?

http://msdn.microsoft.com/en-us/library/cs7y5x0x(v=vs.90).aspx

3 个答案:

答案 0 :(得分:15)

可能的双打数量和可能的长数是相同的,它们的分布方式不同*。

长的是均匀分布的,而浮子则不是。您可以阅读更多here

我会写更多,但由于某种原因,光标在我手机上的各个地方跳来跳去。

修改:这实际上可能更有帮助: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

* 根据该链接,似乎实际上有更多的长片,因为由于NaNs和其他特殊数字的表示方式而导致一些双打丢失。

答案 1 :(得分:8)

long是带符号的64位整数值,double是64位浮点值。查看他们的FCL类型可能更有意义。 long映射到System.Int64double映射到System.Double

答案 2 :(得分:5)

一个简单的答案是,double只能精确到15-16位数,而long则是double,其中(作为整数类型)具有绝对精度 显式数字限制,在本例中为19位数。 (请记住,数字在语义上是不同的。)

long: - / + 0.000,000,000,000,01到+/- 99,999,999,999,999.9 (准确度为100%,从第16位开始精度下降,如“-1.79769313486232e308 .. 1.79769313486232e308”所示。)

ulong: - 9,223,372,036,854,775,808 to +9,223,372,036,854,775,807

uint i;:0到18,446,744,073,709,551,615(比长数字多1位,但数值范围相同(因为它只是被转移以排除负回报)。

通常,int-type 实数优先于浮点十进制值,除非您明确需要十进制表示(无论出于何种目的)。

此外,您可能知道签名优先于无符号,因为前者更不容易出错(请考虑语句i - x;,然后x > i其中$ cd ~ $ cd .ssh $ chmod 400 id_rsa )。