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,这使得一些有趣的(虽然令人费解)概念.
nha*_*tdh 11
我们基本上将有限空间映射到无限的实数集.所以它无论如何都不是基地的问题.
选择Base 2,就像Polynomial所说,出于实现原因,因为更容易区分2个能级.
我们要么投入更多空间来表示更多数字/增加精度,要么限制我们想要编码的范围,或者它们的混合.
你的第一段是有道理的,但第二段是非选票.较大的基数不会对精度产生影响.
数字的精确度取决于用于它的存储量 - 例如16位二进制数与2 x 256基数具有相同的精度 - 两者都占用相同数量的信息.
请参见常用浮点参考.更多细节 - 它概括为所有基础.
是的计算机是使用其他基础构建的 - 我知道那些使用基数10(十进制)cf wikipaedia
它可以从可用的芯片区域中获得最大收益.
如果使用开/关开关来表示数字,则每个开关的精度不能比使用基数2表示更高.这只是因为无论您选择这些值,N个开关都可以表示2 ^ N个数量.早期的机器使用基本的16个浮点数字,但是每个都需要4个二进制位,因此每位的总体精度与基数2相同(实际上由于边缘情况稍微减少).
如果选择的基数不是2的幂,则精度显然会丢失.例如,您需要4位来表示一个十进制数字,但从不使用这4位中的6个可用值.这个系统被称为二进制编码的十进制,它仍然偶尔使用,通常在用钱进行计算时.
多级逻辑可以有效地实现其他基础,但至少对于当前的芯片技术,实现超过2个级别的结果非常昂贵.甚至量子计算机也在设计中,假设有两个量子级:量子比特或量子比特.
世界和数学的本质是浮点情况无望的原因.有一个实数的层次结构Integer - > Rational - > Algebraic - > Transendental.有一个很好的数学证明,Cantor对角化,大多数数字,即"更大的无限",而不是其他集合,是Transdendental.然而,无论你选择什么浮点系统,仍然会有低理性数,没有完美的表示(即基数为10的1/3).这是我们的宇宙.没有多少聪明的硬件设计会改变它.
软件可以并且确实使用有理表示,将分子和分母存储为整数.然而,有了这些,你的程序员的双手都被束缚了.例如,平方根不是"关闭".Sqrt(2)没有理性的表示.
已经研究过代数数字代表和任意实数的"懒惰"代表,根据需要产生更多数字.这种类型的大多数工作似乎都是计算几何.