25

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

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

4

3 回答 3

19

可能的双打数量和可能的多头数量相同,只是分布不同*。

多头是均匀分布的,而浮动则不是。你可以在这里阅读更多。

我会写更多,但由于某种原因,光标在我手机上到处乱跳。

编辑:这实际上可能更有帮助: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 和其他特殊数字的表示方式,一些双精度数丢失了。

于 2012-10-23T00:39:31.217 回答
11

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

于 2012-10-23T00:37:27.190 回答
10

一个简单的答案是,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(比 long 多 1 个数字,但值范围相同(因为它仅被转移以排除负回报)。

一般来说,int 型实数优于浮点十进制值,除非您明确需要十进制表示(无论出于何种目的)。


此外,您可能知道signed优于unsigned,因为前者更不容易出错(考虑语句uint i;,然后考虑i - x;where x > i)。

于 2017-10-07T06:03:58.810 回答