二进制,浮动和现代计算机

PRN*_*ios 27 c hardware floating-point binary computer-science

我一直在阅读有关浮点数和计算机处理的浮点运算的很多内容.我在阅读它们时看到的最大问题是它们为什么如此不准确?我理解这是因为二进制不能准确地表示所有实数,所以数字四舍五入到"最佳"近似值.

我的问题是,知道这一点,为什么我们仍然使用二进制作为计算机操作的基础?当然使用大于2的更大的基数会以指数方式提高浮点运算的准确性,不是吗?

对于计算机使用二进制数系统而不是另一个基数有什么好处,并且有另一个基础曾经尝试过吗?或者甚至可能吗?

Arj*_*kar 37

首先:即使使用say,100,你也不能代表所有实数.但你已经知道了.无论如何,这意味着:由于"无法代表所有实数",因此不准确.

现在,让我们来谈谈" 什么可以做数学时更高基地带来给你?":高等教育基地带来准确"无"在精度方面.为什么?

如果你想使用base 4,那么一个16位的base 4号码可以提供4 16个不同的值.

但是,您可以从32位基数2(2 32 = 4 16)中获得相同数量的不同值.

正如另一个答案所说:晶体管可以开启或关闭.因此,您新设计的基本4寄存器需要是(基数2)ON/OFF'位'的抽象.这意味着:使用两个"位"表示基数为4的数字.但是你仍然会花费N'位'(或N/2个基数为4位)来获得2 N级.通过花费更多的比特,而不是通过增加基数,你只能获得更好的准确性.您想象/抽象的基数(例如,如何printf在基数10中打印这些基数为2)实际上只是抽象而非精确的问题.


Pol*_*ial 23

计算机构建在晶体管上,晶体管具有"接通"状态和"关闭"状态.这对应于高压和低压.几乎所有数字集成电路都以这种二进制方式工作.

忽略晶体管仅仅以这种方式工作的事实,使用不同的基极(例如,基极3)将要求这些电路在中间电压状态(或几个)以及0V及其最高工作电压下操作.这更复杂,并且可能导致高频问题 - 如何判断信号是在2V和0V之间转换,还是实际在1V?

当我们到达浮点水平时,我们(正如他们在答案中提到的那样)将无限的数字空间映射到有限的存储空间.绝对保证我们会失去一些精确度.但是,IEEE浮点数的一个优点是精度与值的大小有关.

更新:你还应该看看Tunguska,一个三元计算机模拟器.它使用base-3而不是base-2,这使得一些有趣的(虽然令人费解)概念.

  • @PRNDLDevelopmentStudios:使用电压电平来表示数字是*模拟计算机*的一个方面.这些使用(50年前)比现在更常见. (4认同)
  • 这是正确的,但没有解决真正的问题,即增加基数对表示的准确性没有影响.您只能通过增加分配的存储空间来增加精度(即更多位,'trits',十六进制数字,基数为100"美分"等) (4认同)
  • 我们已经很难在多GHz系统中检测到1和0之间的差异(这就是为什么你必须过度使用超频处理器),因此区分不那么明显会放大这个问题.基于量子和光子的计算机*可能会在未来让我们远离这些问题,但是现在我们将坚持使用传统的二进制晶体管. (3认同)
  • 可能,但它带来了一系列电气工程问题.数字信号本质上是交流电压源,受到物理本地线路的电磁干扰的影响.电路板上所有通过它的高频数字信号铜基本上都是贴片天线.具有多个电压水平使得分散和尖峰处理起来更加痛苦. (2认同)

nha*_*tdh 11

我们基本上将有限空间映射到无限的实数集.所以它无论如何都不是基地的问题.

选择Base 2,就像Polynomial所说,出于实现原因,因为更容易区分2个能级.

我们要么投入更多空间来表示更多数字/增加精度,要么限制我们想要编码的范围,或者它们的混合.


use*_*019 6

你的第一段是有道理的,但第二段是非选票.较大的基数不会对精度产生影响.

数字的精确度取决于用于它的存储量 - 例如16位二进制数与2 x 256基数具有相同的精度 - 两者都占用相同数量的信息.

请参见常用浮点参考.更多细节 - 它概括为所有基础.

是的计算机是使用其他基础构建的 - 我知道那些使用基数10(十进制)cf wikipaedia


Gen*_*ene 6

它可以从可用的芯片区域中获得最大收益.

如果使用开/关开关来表示数字,则每个开关的精度不能比使用基数2表示更高.这只是因为无论您选择这些值,N个开关都可以表示2 ^ N个数量.早期的机器使用基本的16个浮点数字,但是每个都需要4个二进制位,因此每位的总体精度与基数2相同(实际上由于边缘情况稍微减少).

如果选择的基数不是2的幂,则精度显然会丢失.例如,您需要4位来表示一个十进制数字,但从不使用这4位中的6个可用值.这个系统被称为二进制编码的十进制,它仍然偶尔使用,通常在用钱进行计算时.

多级逻辑可以有效地实现其他基础,但至少对于当前的芯片技术,实现超过2个级别的结果非常昂贵.甚至量子计算机也在设计中,假设有两个量子级:量子比特或量子比特.

世界和数学的本质是浮点情况无望的原因.有一个实数的层次结构Integer - > Rational - > Algebraic - > Transendental.有一个很好的数学证明,Cantor对角化,大多数数字,即"更大的无限",而不是其他集合,是Transdendental.然而,无论你选择什么浮点系统,仍然会有低理性数,没有完美的表示(即基数为10的1/3).这是我们的宇宙.没有多少聪明的硬件设计会改变它.

软件可以并且确实使用有理表示,将分子和分母存储为整数.然而,有了这些,你的程序员的双手都被束缚了.例如,平方根不是"关闭".Sqrt(2)没有理性的表示.

已经研究过代数数字代表和任意实数的"懒惰"代表,根据需要产生更多数字.这种类型的大多数工作似乎都是计算几何.