问题

为什么计算机不用e进制,按道理说e进制难道不是最高效的吗?

回答
关于“计算机为什么不用e进制”这个问题,很多人会联想到数学常数e,以及它在自然增长和连续变化中所扮演的关键角色,继而推测是否e进制会比我们熟悉的二进制、十进制更“高效”。这是一个非常有趣且值得探讨的角度,但实际情况并非如此简单,甚至可以说是完全相反的。

首先,我们得明确一下“进制”的本质。一个数制,比如我们常用的十进制,就是用一组固定的符号(09)来表示任意大小的数字。而“进制”指的就是我们用来表示数字的符号的数量,也就是基数。十进制就是基数为10,二进制就是基数为2。

为什么我们不使用e进制?

1. e不是一个整数: 最大的根本性问题在于,进制的基数必须是一个整数。这是因为我们用来表示数字的符号(数字本身)是离散的、可数的。比如十进制有0、1、2、3、4、5、6、7、8、9这十个符号,它们可以清晰地对应到我们数数时的每一个单位。而e,作为自然对数的底数,大约是2.71828...,它是一个无理数。我们无法创建出“2.71828...个”个不同的符号来代表不同的数值。你可以想象一下,用几个符号来表示大于等于0小于2.71828...的数?这在实际操作上是无法实现的。进制的定义就要求基数是离散的、可以被计数和区分的。

2. 实际操作的复杂性: 即使我们忽略“e不是整数”这个致命伤,假设我们能神奇地定义一个“e进制”,它的运算会极其复杂。在任何进制下,数字的表示都遵循“逢几进一”的规则。比如二进制是逢2进一,十进制是逢10进一。那么“e进制”将是逢e进一?这会涉及到小数的进位,比如当计数达到2的时候,下一个数是2.71828...吗?这会产生大量的浮点数运算,而且这些浮点数很可能永远无法精确表示,导致累积误差巨大。加减乘除这些基本的算术运算,在非整数基数下都会变得异常困难和低效。

3. 硬件实现的难度与低效: 计算机底层最基本的运算都是通过电子元件来实现的,比如开关的“开”和“关”。这天然就对应着二进制的0和1。一个电子元件最容易区分的就是两种状态(高电压/低电压,开/关)。如果我们要实现所谓的“e进制”,就需要能够稳定区分大约2.71828...个状态的电子元件,这从物理上是根本不可能做到的。即使勉强用近似值,比如用3个状态或者4个状态的元件来模拟,其复杂度和不稳定性的增加将是指数级的,并且效率会大幅下降。维护和制造这样的硬件成本将是天文数字。

4. “高效”的误解: 很多人觉得e与自然增长、指数函数紧密相关,所以就认为它在信息处理上会很“高效”。但这里的“高效”是理解错了概念。e在数学上之所以重要,是因为它在微积分、概率统计、金融模型等领域处理连续变化和增长率时,能够产生简洁优雅的数学表达和计算结果。例如,y=e^x的导数就是它本身,这是非常特殊的性质。但计算机处理的是离散的信号和逻辑,是基于开关的“开”与“关”。计算机的核心任务是快速准确地执行逻辑判断和计算,这与自然界中连续变化的规律并不直接等同。

那么为什么选择了二进制?

1. 硬件的绝对简单与可靠: 如前所述,二进制与电子开关的两个稳定状态(开/关,高电平/低电平)完美契合。制造、控制和区分这两种状态的电子元件(如晶体管)是目前电子工程中最成熟、最可靠、最经济的技术。它的简单性使得大规模集成电路的设计和生产成为可能。

2. 逻辑的完备性: 任何复杂的逻辑运算都可以用布尔代数(只涉及“真”和“假”,即0和1)来表示和实现。通过组合简单的逻辑门(AND, OR, NOT),我们可以构建出计算机执行的所有指令。

3. 错误检测与纠正的便利: 在传递信息时,区分两个状态(0或1)远比区分多个状态要不容易出错。而且,通过冗余编码(如奇偶校验),二进制系统可以相对容易地检测甚至纠正传输或存储过程中的错误。

4. 数学的简单性: 二进制的运算规则非常简单,逢二进一,这使得计算机在执行算术运算时,其内部的逻辑电路设计也相对简单。

那么十进制为什么不是计算机的底层语言?

虽然十进制在人类交流中非常方便,但它对于计算机来说,并不比二进制更“高效”。要实现十进制,就需要能够区分0到9这十个状态的电子元件。这意味着每个“数字”都需要用更多的物理信号来表示(例如,用多个二进制位组合来表示一个十进制数字,这就是BCD码,但它增加了转换的复杂性)。在硬件层面,制造能够稳定处理10个不同状态的元件会比处理2个状态复杂得多,也更容易出错。

总结一下:

e进制之所以无法使用,核心原因在于它的基数e是一个无理数,无法对应离散的数字符号,这在数学和物理层面都无法实现。计算机选择二进制并非偶然,而是基于硬件实现的极简、可靠、经济以及逻辑运算的完备性。我们感知到的e的“高效”更多体现在其在描述连续变化和增长率的数学模型中的作用,而不是在处理离散数字信号的计算系统中。计算机的底层语言必须是能够被最基本、最稳定的物理状态所代表的进制,而二进制恰好是最佳选择。

网友意见

user avatar

因为不是。


所谓e进制“高效”的说法,是从信息量的角度推导出来的。

这个推导基于这样一个问题:“我们在何种进制下,可以用最少的符号表示最多的数字?”。

举个现实的栗子,这种倒计时的牌子:

在表示0-999一千个整数的情况下,

二进制需要10位数,准备20个牌子(10组0、1,下略);

三进制需要7位数,准备21个牌子[1]

四进制需要5位数,准备20个牌子;

五进制需要5位数,准备25个牌子;

……

十进制需要3位数,准备30个牌子。

……

所以我们可以说,在表达0-999这个问题上,二进制和四进制是“最高效”的。


但是显然的,这存在不公平——除了十进制,所有进制都有被“浪费”掉的部分

因为我们在考虑“需要几位数”的时候是这么考虑的:

向上取整为10,10×2=20;

向上取整为7,7×3=21;

……

,3×10=30;

……


尤其对于三进制等,这个浪费是极大的。但是,换个数字的话,可能别的进制又遭到了“不公平待遇”。

所以,我们为了讨论更一般的,针对任意数字的情况,进行推广,接受“需要的位数可以为非整数”的情况,如此一来,便不再需要进行向上取整。

于是乎,我们为了表示M个数,在r进制下,需要 个“牌子”[2]

因此,这个“效率”[3]我们可以表示为。

我们若再对r进行推广,接受“非整数进制”,便可以简单的求导得到r=e时E最大的结论。

这也就是 @梦星河 等大佬推导的问题。


到此处我们似乎的确证明了“e进制更高效”。但实际并非如此

要问为什么的话,我们还需要回到最开始的问题:

我们为什么认为需要准备二十块牌子的二进制或四进制,在表示0-999的问题上,是最高效的?

因为,在现实生活中,购买任何一块牌子的价格是一样的

无论是只印0和1,还是印0,1,2,单价都是一样的。20个牌子就是20倍的单价,21个牌子就是21倍的单价。

所以20块牌子就是便宜,就是高效,不用考虑别的因素。


至此,对计算机稍有常识的朋友此时就看出端倪了:

制造不同进制的计算机运算、储存单元,成本可不一样……

我们假设一个r进制bit成本函数为 ,那么,其“单个牌子”[4]的成本为 。

所以,此时,我们的“效率”[5]为。

当 时,就退化回了 的情况。

而 意味着什么?意味着制造不同进制元件的成本正比于进制,或者说单个符号成本相同。即上文举的倒计时牌子的情况。

亦即e进制元件的成本只是二进制元件的 倍。

这是显然不符合事实的

从这个公式我们也可以很容易看出来一个结论:

只要 的增长速率大于对数级,进制越大,“效率”越低。

然而,可悲的现实就是,以我们目前的技术而言,的增长速率远远大于对数级、正比级,起码是多项式级的……

此外,并不是一个单调函数……甚至不是一个连续函数……

因为我们几乎做不出来非整数进制的计算机元件,所以在非整数域无定义(或者是趋向于无穷)……

所以,对于整个计算机系统而言,只有定义域内的最小整数——2,所对应的 是最高的。

但是对于部分元件,在2的指数倍进制上,成本增长速度还是低于对数级的。所以计算机局部上是可以有4,8,16等进制元件的。比如闪存NAND元件[6]


综上,我们可以得出结论:

对于计算机而言,二进制是真正的高效的。

或者说,正因如此,我们才选择了二进制计算机。


鉴于 @William Lee 多次删除我的评论,我就只能在这里发布对

的评价了。

不要用所谓“常识”去否定数学问题应该才是“常识”。

进制的本质是

2.5进制下,

进制下,

甚至可以有小于1的进制,但是那时我们可能需要定义新的符号用以代表数位上的数字(就像16进制下用A代表10)。

这些都是有很好的定义的,所以完全是合理的存在。

至于说什么“进位失去意义”,我只能说,整数进制下的性质不能类推到其他进制下,那是很正常的事情,不能因为这种现象就否定非整数进制的存在性与合理性。

当然,我承认,我在最开始解释的时候权数算错了,但这又不影响这个概念的正确性,而且我也改正过来了。

相反,我实在是想不明白对方强不认错,甚至删我的评论是怎么个想法……

参考

  1. ^ 实际上最高位不需要2,所以只需要20个牌子,但此处为了类推关系,仍计算为7组0、1、2。在后文的更一般情况下,这种矛盾就得到了化解,因此不在此处使用更复杂的算法。
  2. ^ 即其他回答中的“符号”
  3. ^ 即单个符号提供的信息量
  4. ^ 即单个符号
  5. ^ 即单位成本可表达的信息量
  6. ^感谢@惜墨 的提醒,初次编辑时忘记引用,十分抱歉。 https://www.zhihu.com/people/xi-mo-89-7
user avatar

当初只是刚好看到过e进制的说法所以随手答了一下,也没有解释的很清楚,没想到会有这么多大佬关注,我诚惶诚恐,又查了一些资料,对评论区的问题做一个统一回答吧。

1、e进制在数学上是怎么定义的?首先进制在数学定义中并没有限定只能是自然数, 对于任何一种进制——X进制,就表示每一位置上的数运算时都是逢X进一位,e进制中也是,e进制下每一位可能的状态就是{0,1,2},计算方法和其他整数进制也没有区别,举个例子就是 。更详细一些的进制转换表如下表。

2、e进制能否在计算机中怎么定义?对不起这个确实没办法,我想分数进制的话也许可以通过不同进制的组合来实现,将多位视作做一个整体来进行分析,但是e作为无理数我确实想不到怎么去准确地在计算机中实现e进制,或者说实现了也没办法用来准确的表示有理数,这也是题主的设想无法实现的原因。

3、 的意义到底是什么?这也是大家质疑比较多的一个问题,但是很遗憾这种计算方法也不是我原创的,我以前在某个博客上看到的觉得有道理就接受了,但是确实没有仔细考虑过N到底是什么含义,我找了蛮久也只找到别人复制的博客,并没有人给出具体的解释,我只能讲讲现在我自己的理解:

在目前的二进制计算机中,二进制数据在计算机的存取和传输中都是电压信号来表示的,电压高于阈值就是高(1),低于阈值就是低压(0),这是一件很自然的事情,完美贴合二进制的非此即彼的逻辑。上世纪苏联的三进制计算机则是用正电压(+1),零电压(0)和负电压(-1)来表示的,似乎从逻辑上也是只需要和0进行比较即可,但是在应用中电压不可能是准确0,所以其实还是划分了阈值的,并且至少是两个阈值,依旧是进行非此即彼的比较,不过有可能要比较2次。所以我一开始的思路是依此类推,认为 反映了计算机存取每一位的代价,但是经评论区提醒,按这种思路仔细考虑的话,如果我们假设电压值落在每一个区间的概率处处相等,对于r进制的数,我们要找出电压对应的逻辑值其实就是一个折半查找的过程,平均比较次数就是 的,这么看来我们用 来表示计算机存储和携带数据的代价并不合适,应该是 更合适,那么继续按照我之前的思路计算,最后的结果E就是一个只跟n相关的常数。这么说对于计算机来说采用2进制还是3进制的消耗其实是一样的吗?但是我们重新考虑一下上述推理中有一个重要条件,就是我们假设了电压值落在每一个区间的概率处处相等,这真的合理吗?显然在一个电路中电压的范围不会是整个数域,一般也不会是在取值范围内均匀分布的,它有自己的分布规律,这个规律是没法预知的,所以我认为没办法用这种方法来准确度量计算机存取一个r进制位的代价。我现在更倾向这种计算方式其实并不表征一个物理意义,只从逻辑上说明e进制下每一种状态所能携带的信息量是最大的。如果大家有更好的理解方式欢迎指出。

下图是维基百科中的说明,供大家参考,大家也可以自行搜索底数经济度进一步了解:


我先解释一下题主说的e进制最“高效”是怎么来的吧。

假设我们用n个r进制位来表示一个数,那么能表示的数的数量最多就是 ,这就是用n个r进制位能携带的最大信息量,此时我们一共需要 个符号。在实际应用中我们通常知道我们需要的这个上限M,所以把它作为一个常量,那么就得到 ,每个符号能携带的信息量就是 。

求导易得当r=e(e为自然对数的底)时E取得最大值。

而且事实上r=3时比r=2时E值更大。所以也有人提出过3进制计算机的设想,甚至上世纪就有人实现过,使用正电压(+)、零电压(0)、负电压(-)表示三种状态,但是后来并没有掀起什么波澜,因为在集成电路时代用高电压和低电压来表示电路状态是一种更高效的方式,反而三种状态很难快捷准确地表示和判断。

至于题主说的e进制。。。我觉得可能需要一种全新的,人类闻所未闻的方式来准确表示超越数。以及哪怕未来设计出来了应该也不会应用到PC中,因为超越数的幂除了0次幂之外其他整数幂次都将是超越数,人们日常使用中需要最多的还是自然数。不过在求解某些数学问题的专用计算机中中可能会挺有用的,在加密时应该也可以用到,题主可以去大胆探索下试试说不定会有发现哦୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭


另外我觉得 @白云龙 的解释其实比我的更清楚直观,我说的并不算清楚,实在惭愧,大家可以移步去看看zhihu.com/question/4353

user avatar

e进制最优是一个数学问题

用不用e进制是一个工程问题

计算机是干啥的?

是用来为人服务

不是用来验证“完美造物”的

最简单的道理,每个程序中的每个值,它是有长度限制的,你弄个无理数进制,你想干吗?

人类生产生活实践中需要储存和计算的数据,几乎全部是有理数,绝大部分是整数和四到六位以内的小数。

无理数进制的实用性在哪里?

user avatar

我一直觉得e进制这个东西,不说高不高效,数学上,实际上,一切非整数进制我觉得都完全不make sense。

整数进制的两个基本特点分别是,可以(利用无限小数)表示任何一个实数,且每个实数至多有两个表示,在做简单的约定以后,就有且只有一个表示。

如果你把e进制下的表示法看成∑a_i e^i,其中a_i是0/1/2,那么有很多数就没法用e进制表示,比如(2*e +0.01) / (e - 1)。

如果你把e进制里的a_i理解成0到e左闭右开区间的任意实数,那么,又会有很多数有太多的表示方法,比如e+1。

这无疑是要人在两坨翔里选一坨吃,我觉得这种进制毫无疑问是不会被人接受的

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有