【问题标题】:Does double have a greater range than long?double 的范围是否比 long 更大?
【发布时间】:2012-10-12 21:18:09
【问题描述】:

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

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

【问题讨论】:

  • 一切都与精度有关,或缺乏精度:IEEE Floats。 Long 实际上存储数字,而浮点存储相对不精确的数字的科学表示。

标签: c# types size


【解决方案1】:

可能的 double 数和可能的 long 数相同,只是分布不同*。

long 是均匀分布的,而 float 则不是。你可以阅读更多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

* 根据那个链接,看起来实际上有更多的长整数,因为由于 NaN 和其他特殊数字的表示方式,一些双精度数丢失了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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;,然后是 @987654327 @其中x > i)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-25
        • 2018-11-30
        • 1970-01-01
        相关资源
        最近更新 更多