双倍的范围是多长吗?

Nyx*_*Nyx 19 c# size types

在MSDN上的一篇文章中,它声明double数据类型的范围是"-1.79769313486232e308 .. 1.79769313486232e308".而long数据类型仅具有"-9,223,372,036,854,775,808 ... 9,223,372,036,854,775,807"的范围.如果它们都是64位大小,double那么如何保存这么多的数据long呢?

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

wil*_*ill 15

可能的双打数量和可能的长度数量是相同的,它们只是分布不同*.

长的是均匀分布的,而浮子则不是.你可以在这里阅读更多.

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

编辑:这实际上可能更有帮助: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和其他特殊数字的表示方式而导致一些双打丢失.


Tej*_*rma 8

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


Ron*_*ken 8

一个简单的答案是,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).