2

I know that this may be a common question, but I have never found an answer (and maybe it has to do with not knowing how to search google correctly, so if somebody can point me to a reference, I will remove this question).

Why do doubles work how they do in terms of representing the right side of the decimal with an inverse power of 2, and the left side of the decimal with a power of 2? I know that it allows very large numbers to be represented, but are there any other advantages? The .NET framework has the decimal data structure available, which seems much more logical to use becuase it is how we represent numbers in human notation.

Really, my question is why doubles were created the way they were instead of initially creating something like decimal instead (which seems to be far less common).

4

2 回答 2

3

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

至于它们为什么存在:二进制浮点表示法有两个方便的属性:

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

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

于 2013-09-03T15:42:57.827 回答
0

FP 格式将最大精度打包到一个“单词”或两个“单词”对象中,同时还添加了一个指数,以便可以以相同的精度进行涉及大或小值的科学计算1 . 因为对象适合单词,它们可以适合寄存器,并且它们在 CPU HW 和 GPU 单元中得到支持,所以它们真的非常快。2.

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

任何一种格式可以用于具有足够的kludges和仔细编程的相反应用程序,但它没有太多意义。

1. 事实证明,即使精度是有限的,也不知道任何物理常数几乎可以达到精度数据类型的精度。因此,它们确实正是这些类型的计算所需要的。

2. 这些天快得难以置信。如果你能把它及时收回几年,每个 GPU 都将成为世界上最快的超级计算机 CPU。

于 2013-09-03T17:26:58.967 回答