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

时间:2012-06-06 14:19:22

标签: c binary floating-point hardware computer-science

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

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

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

10 个答案:

答案 0 :(得分:37)

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

现在让我们谈谈 什么可以在做数学时为你带来更高的基础?”:更高的基数带来了'nothing'精度方面。为什么呢?

如果你想使用base 4,那么一个16位的base 4数字恰好提供4个 16 不同的值。

但是您可以从32位基数2 (2 32 = 4 16 )获得相同数量的不同值。< / p>

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

答案 1 :(得分:23)

计算机基于晶体管,具有“开启”状态和“关闭”状态。这对应于高压和低压。几乎所有数字集成电路都以这种二进制方式工作。

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

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

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

答案 2 :(得分:11)

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

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

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

答案 3 :(得分:6)

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

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

有关详细信息,请参阅Usual floating point reference.,并将其推广到所有基础。

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

答案 4 :(得分:6)

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

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

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

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

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

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

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

答案 5 :(得分:3)

是的,有的计算机使用的不是二进制(即基本2表示和aritmetic除外): Decimal computers

计算系统的设计者已经研究了许多替代方案。但是很难找到一个在物理设备中实现的模型,而不是使用两个离散状态的模型。因此,从二进制电路开始,这种电路非常容易且便宜,可以构建并运行到具有复杂操作的计算机。简而言之,这就是二进制的历史。

答案 6 :(得分:1)

我不是EE,所以我在下面说的一切都可能是完全错误的。但...

二进制的优点在于它非常干净地映射以区分实际电路中的开/关(或更准确地说,高/低电压)状态。我认为,试图区分多个电压会带来更多的挑战。

如果量子计算机离开实验室,这可能会完全消失。

答案 7 :(得分:1)

使用二进制浮点数来表示数学实数有两个问题 - 好吧,可能存在更多问题,但暂时只有2个。

  1. 所有计算机编号都是有限的,所以任何数字都需要 无数个数字无法在a上准确表示 计算机,选择任何数字基数。因此处理pi,e, 和大多数其他实数。
  2. 无论选择何种基数,都难以表示(有限)某些分数。基数2只能在分母中近似任何因子为3的分数,但基数5或基数7也是如此。
  3. 多年来,已经构建了具有基于具有超过2个状态的设备的电路的计算机。旧苏联开发了一系列具有三态设备的计算机,并且至少有一家美国计算机制造商同时提供使用10状态设备进行算术运算的计算机。

    我怀疑二进制表示已经胜出(到目前为止)因为它很简单,无论是推理还是实现当前的电子设备。

答案 8 :(得分:0)

我投票表示我们转移到Rational数字系统存储。将评估为p / q的两个32位整数。乘法和除法将是非常便宜的操作。是的,会有多余的评估数字(1/2 = 2/4),但是真正使用64位双倍的全动态范围。

答案 9 :(得分:-2)

我既不是电气工程师也不是数学家,所以当我做出以下声明时,请考虑到这一点:

所有浮点数都可以表示为整数。