为啥E进制计算机的效率最高?
任何一套计算机技术, 只要有人开发有人用, 它一定是有数学理论基础作支撑的, 比如SQL语言就是基于关系代数和集合论, 俄罗斯曾经研究过3进制计算机也是因为数学证明3进制比2进制理论上效率要高, 因为3比2更接近自然常数'e' (2.71828....).很久以前,我在一本《计算机应用基础》教程上看到类似这样的描述:“理论上e进制是最优的进制,考虑到取整数,三进制是实际可用的最优进制,但是考虑..
任何一套计算机技术, 只要有人开发有人用, 它一定是有数学理论基础作支撑的, 比如SQL语言就是基于关系代数和集合论, 俄罗斯曾经研究过3进制计算机也是因为数学证明3进制比2进制理论上效率要高, 因为3比2更接近自然常数'e' (2.71828....).
很久以前,我在一本《计算机应用基础》教程上看到类似这样的描述:“理论上e进制是最优的进制,考虑到取整数,三进制是实际可用的最优进制,但是考虑到尽可能简化硬件电子器件的设计与制造,现代电子计算机系统的设计普遍基于二进制”。当时我就很不明白这个“e进制”结论是如何推导出来的?从什么角度出发来看待“最优”?那个时候我才刚刚学会用电脑打字,才刚刚学会浏览网页,无法在中文网页上查到任何答案,英文的网页也看不懂。当时我的兴趣也不在计算机科学上,这个困惑就不了了之了,但是问题始终是记在了心里,没敢忘记。
今天重新回到了这个问题, 以一个新的观念思考E进制问题, 尽可能的通俗易懂, 然后由于职业病, 本文许多地方将用ecmascript表达式来表示一些无法表示的数学公式~
什么叫"效率最高"呢? 我认为是利润率最高, 换个形式就是, 得到相同的回报, 成本越低的方案效率越高.
假设我们有n位比特(不只是2进制), 那么可以建立这样一张表:
二进制 | 三进制 | r进制 | |
产出 | 2**n | 3**n | r**n |
投入 | 2n | 3n | rn |
进制的'表示能力'很好理解, 但如何衡量进制的成本?
我们认为, 投入的成本就是总共多少位乘每位多少个状态, 也就是总共需要的状态数量, 把它作为成本. 虽然我不知道这样衡量成本是否一定准确, 但是纯数学没有'存储'的概念, 所以这个成本概念仍然是依赖于物理.
或许把'成本'理解成'存储空间'的相对大小最合适, 注意, 是相对大小而不是绝对大小, 因为一个2进制比特所占据的物理空间未必是4进制比特的一半. 但是数学家不想考虑那么多真实世界的情况, 他们就认为存储3种状态的成本是2种状态的1.5倍, 至于具体情况就甩给物理学家来研究吧, 重点! 这也是日后物理学家选择2进制而非3进制的原因!!
但是进制的产出或者叫'表示数的能力'很好理解, 就是r^n个数.
如何比较效率?
当n==1的时候, 我们会发现所有进制的效率都是相等的, 因为成本:回报==1, 但是我们真的能用比率的形式来表示效率吗, 仔细想一下就知道不行, 因为这个比率与n相关, 如果r进制是常量的话, 回报率等于(r**n)/(r*n)也就是r**(n-1)/n这个关于n的函数是递增的, 也就是位数越多, 回报率越大......
所以人类并不会将全世界的晶体管都拿来做内存以获得无穷无尽的回报, 因为当硬件成本越来越低, '无穷无尽'的回报大都是useless的.
那么该如何公平的比较不同进制的效率呢????如果按照上面推断, 应该是进制越大效率越高哇, 咋回捏??
真实情况是, 比特并不需要多大
和理想状态下不同, 真实情况下, 我们需要多个比特之间顺序排列才能有意义, 哪怕一个一千进制的比特,它同一时间也只能表示1种状态, 即一个对象, 这样的话如果来表示bool类型数据就太浪费了. 同样, 如果用3个比特表示一个数, 数的数量是r**3个, r太大了也没有意义.
举个最简单的例子, 如果银行肯借给我10亿, 我立马能用它每个月1000万的利息致富, 这种方式比任何亿元以下的投资都划算, 但现实情况就是, 10亿根本得不到.....
所以我们应该换一种思路来考虑进制的效率, 那就是: 当目标回报一定的时候, 哪种进制的成本最低?
设目标回报等于m, 即r**n===m, n===log(r,m) (或者LOGr(m)... 怎么开心怎么写)
那么成本关于r的表达式即: r*log(r,m), 这个函数其实只要利用换底公式就可以轻松转化成对数函数 , 以便用JavaScript画出来:
cost = r => C1*r/log(c2,r), 为了比较相对的cost就可以把常数C1去掉, 得到:
cost_rela = r => r/log(c,r), 于是我分别让c等于e,2和10, 图像都长成类似这样:
可以看出, 曲线的最小值就在E~2.7处, 所以E进制的成本是最小的. 至于用一个无限不循环的小数作为进制我实在不敢想象,而E最接近的整数就是3了,但是由于种种原因, 因为当前科技水平, 仍然是二进制的物理成本更低, 所以计算机选择了2进制而不是3进制.
为啥人脑使用10进制而不是3进制呢?
我再次咒骂自己一遍: 为啥要思考这种无聊的问题????? 既然思考了就简单说一下结论吧: 因为人类不惜牺牲大脑存储空间来换取时间效率, 哪怕平均下来仍然是亏的......最主要的是人脑空间无法自有利用, 所以不用白不用啊, 很合理吧~~~
当然, 这篇文章仍然没有解释为啥自然常数e这么特殊, 为啥e在自然界处处可见, 这个说来话长了, e的神奇之处恐怕1天也说不完...
最后感谢mommytalk这个B站up主的视频给了我灵感:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)