我知道这可能是一个常见的问题,但我从来没有找到答案(也许这与不知道如何正确搜索谷歌有关,所以如果有人可以指点我参考,我会删除这个问题)。
为什么双精度表示如何表示小数的右侧,反函数为2,小数左侧的幂为2?我知道它允许表示非常大的数字,但还有其他任何优点吗? .NET框架具有可用的decimal
数据结构,这似乎更符合逻辑,因为它是我们用人类符号表示数字的方式。
真的,我的问题是为什么双打是按照他们的方式创建的,而不是最初创建像十进制的东西(这似乎不太常见)。
答案 0 :(得分:3)
你的困惑似乎没有根据。小数点的右侧始终以基数的反幂表示,左侧始终表示为基数的幂。对于基础10和基础2也是如此。二进制浮点数存储一个指数,用于控制小数点在尾数上的位置。
至于它们存在的原因:二进制浮点表示法有两个方便的属性:
这些属性使它们非常适用于例如物理计算,因为最后一个地方的一个小错误并不重要,但是使它们无法用于货币应用程序(你需要decimal
,尽管计算速度慢得多)。
答案 1 :(得分:0)
FP格式将最大量的精度打包到一个“单词”或两个“单词”对象中,同时还添加一个指数,以便科学计算 1。涉及大或小的值可以以相同的精度进行。因为对象适合于单词,所以它们可以适合寄存器,并且它们在CPU HW和GPU单元中受支持,因此它们实际上真正快。 2。
十进制格式较慢,较大,硬件几乎从不支持它们,但它们也不需要精心设计的二次计算,因此无关紧要。我们可以轻松地在软件中计算bean。十进制字符串的一个优点是我们在现实生活中编写的数字(0.10,0.11,0.12,...)可以准确表示,这确实有助于计算。 (奇怪的是,由于我们使用了基数为10的IRL,我们在商业中编写的几乎所有数字实际上都不能在基数2中表示,如果它们有一个分数。)
格式可以用于相反的应用程序,有足够的kludges和仔细的编程,但它没有多大意义。
1。事实证明,即使精度有限,也不知道物理常数几乎与 double 数据类型的精度有关。因此,它们确实正是这些类型计算所需要的。
2。如今,人们已经超越了信如果您可以在几年内及时收回,那么每个GPU都将成为世界上最快的超级计算机CPU。