代码之家  ›  专栏  ›  技术社区  ›  Dan Drews

为什么替身能像他们那样工作

  •  2
  • Dan Drews  · 技术社区  · 11 年前

    我知道这可能是一个常见的问题,但我一直没有找到答案(也许这与不知道如何正确搜索谷歌有关,所以如果有人能给我指一个参考,我会删除这个问题)。

    为什么doubles的工作原理是用2的逆幂表示小数的右侧,用2的乘方表示小数的左侧?我知道它可以表示非常大的数字,但还有其他优势吗?.NET框架具有 decimal 数据结构可用,这似乎更符合逻辑,因为这是我们用人类符号表示数字的方式。

    实际上,我的问题是,为什么双打是按照原来的方式创建的,而不是最初创建十进制之类的东西(这似乎不太常见)。

    2 回复  |  直到 11 年前
        1
  •  3
  •   Joey Gumbo    11 年前

    你的困惑似乎是没有根据的。小数点的右边是 总是 以基数的逆幂表示,左侧为 总是 表示为基数的幂。对于底座10和底座2也是如此。二进制浮点数存储一个指数,该指数控制小数点在尾数上的位置。

    至于它们存在的原因:二进制浮点表示法有两个方便的财产:

    1. 它相对较快,因为它使用二进制运算
    2. 它可以以一定的精度表示非常大或非常小的数字。

    这些财产使它们非常适合进行物理计算,因为最后一个地方的小错误并不重要,但会使它们无法用于货币应用程序(在您想要的地方 decimal ,尽管计算速度慢得多)。

        2
  •  0
  •   DigitalRoss    11 年前

    FP格式将最大数量的 精确 转换为一个“单词”或两个“单词“对象,同时添加一个指数,以便进行科学计算 1. 可以以相同的精度进行涉及大值或小值的处理。因为对象适合单词,所以它们可以放入寄存器,并且它们在CPU硬件和GPU单元中都受支持,所以它们确实是 真正地 快速的 2.

    十进制格式更慢、更大,硬件几乎从不支持它们,但它们也不需要复杂的二次计算,所以这无关紧要。我们可以很容易地在软件中数豆子。十进制字符串的一个优点是,我们在现实生活中写的数字(0.10、0.11、0.12…)可以精确地表示,这对会计很有帮助。(奇怪的是,由于我们使用了基数为10的IRL,我们在商业中写的几乎所有数字实际上都不能用基数为2表示,如果它们有一个分数的话。)

    任意一种格式 可以 可以用于相反的应用程序,有足够的笨拙和仔细的编程,但这并没有多大意义。

    1.事实证明,即使精度有限,也没有已知的物理常数能达到 双重的 数据类型。所以,它们确实是这些类型的计算所需要的。

    2.如今速度之快令人难以置信。如果你能在几年后把它带回过去,每一个GPU都将成为世界上速度最快的超级计算机CPU。