【问题标题】:decimal in c# misunderstanding?c#中的十进制误解?
【发布时间】:2012-05-16 08:21:32
【问题描述】:

(在尝试分析 decimal 的工作原理时)&& 在阅读 @jonskeet article 并看到 msdn 并思考了过去 4 小时后, 我有一些问题:

this link 他们说的很简单:

1.5 x 10^22 有效数字

1.50 x 10^2 具有 3 有效数字。

1.500 x 10^24 有效数字等...

好的……我们明白了。

来自 jon 的文章:

 sign * mantissa / 10^exponent

像往常一样,符号只有一位,但有 96 位 尾数和5位指数

 ^ _ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^___ ^^^^^

 1 _                     96                         5

好的

so max ma​​ntiss val = 2^96-1 = 79228162514264337593543950335 即:7.9228162514264*10^28 (根据我的 iphone...无法在 windows calc 中看到指数表示)

注意:

7.9228162514264*10^2814 个有效数字(根据上面的例子)

现在指数中 5 位的部分无关紧要,因为它在 分母 - 所以我需要最小 val 即 2^0

问题 #1:

msdn 说:28-29 significant digits

但根据我的样本(1.500 x 10^24 有效数字),他们有 2 个有效数字,即7.9(7 和 9)。

如果 msdn 会写:

±79228162514264337593543950335 × 10^0

我会理解这一点,因为所有有效数字都在表达式中

为什么他们写的是 28-29 而显示的是 2?

问题 #2:

值 0.5 将如何显示十进制表示(尾数 && 指数)?

最大分母可以是2^32-1 --> 31

谢谢大家。

问题 #3:

1+96+5 = 102 位。

msdn 说:

decimal 关键字表示 128 位数据类型。

128-102 = 26

可以从文章中了解为什么没有使用那些 26 位

【问题讨论】:

    标签: c# .net clr decimal


    【解决方案1】:

    他们只将 范围 指定为两位有效数字,但单独指定了 精度。这就是该范围被列为“近似范围”的原因。

    decimal 的 0.5 表示将是尾数 5 和指数 1(以与正常相反的方式处理,即它有效地 -1)。

    【讨论】:

    • @RoyiNamir:不,尾数是 5。是什么让你认为它与 2^5 有关?我怀疑你误解了尾数是什么。
    • 哦,抱歉...:) 经过 4 小时的搜索,我正在思考 base 2 :)
    • @RoyiNamir:尽管基数无关紧要-您永远不会将基数提高到尾数的幂;这就是 指数 的用途。
    • 我可以说精度(点右边的十进制数字)在 28 位以内是准确的吗?因此,如果我添加了 28 个小数的 2 个小数 - 结果会准确吗?说的是真的吗?
    • @RoyiNamir 小数的精度在 2^96/10 范围内是准确的,前提是数字在 0 到 1 之间。
    【解决方案2】:

    为什么他们写的是 28-29 但显示的是 2?

    为了可读性。它说“近似范围”并且 7.9E28 比 79228162514264337593543950335(这里是 E0,而不是 E1)更具可读性。

    值 0.5 将如何显示十进制表示(尾数 && 指数)?

    指数的范围是 -28...0,但是,它被存储(并通过构造函数参数接收)为绝对值 0...28。

    所以 0.5 与 5 具有相同的尾数表示,指数为 -1(存储为 1)。

    【讨论】:

    • 您在“如果指数为 5 位”部分中对指数和尾数感到困惑。您认为 MSDN 的哪一点不准确?
    • 一个。尾数是 96 位,指数是 5——我到底在哪里混淆了这两者。湾。 “比例因子隐含地是数字 10,提高到从 0 到 28 的指数。” - 没有提到负指数。
    • 所以指数没有自己的符号? - 那你怎么知道你必须使用 E+n 还是 E-n 呢?
    • (顺便说一句,我刚刚在添加另一条评论。)十进制的指数始终在 0-28 范围内,如文档中所述。然后使用作为传统指数的反义,如文档所示(值 = 符号 * 尾数 / 10^exponent)
    • 我仍然认为您关于“如果指数是 5 位并且有符号,那么整个范围是 -2^31 .. 2^31 - 1”的说法非常混乱和/或令人困惑。尽管对decimal 非常了解,但我当然不知道您的意思。请注意,范围取决于尾数的大小以及指数。
    猜你喜欢
    • 1970-01-01
    • 2022-01-21
    • 2010-12-30
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多