V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lynnlee
V2EX  ›  程序员

为什么三进制计算机没有流行下来?如果现在是三进制会怎么样?

  •  
  •   lynnlee · 2014-05-25 15:08:41 +08:00 · 46850 次点击
    这是一个创建于 3836 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在公开课看到一个问题觉得很牛比啊。
    如下:
    现今的计算机都使用“二进制”数字系统,尽管它的计算规则非常简单,但其实“二进制”逻辑并不能完美地表达人类的真实想法。相比之下,“三进制”逻辑更接近人类大脑的思维方式。因为在一般情况下,我们对问题的看法不是只有“真”和“假”两种答案,还有一种“不知道”。在三进制逻辑学中,符号“1”代表“真”;符号“-1”代表“假”;符号“0”代表“不知道”。显然,这种逻辑表达方式更符合计算机在人工智能方面的发展趋势。它为计算机的模糊运算和自主学习提供了可能。只可惜,电子工程师对这种非二进制的研究大都停留在表面或形式上,没有真正深入到实际应用中去。
    不过,凡事都有一个例外,三进制计算机并非没有在人类计算机发展史上出现过。其实,早在上世纪50、60年代。一批莫斯科国立大学的研究员就设计了人类历史上第一批三进制计算机“Сетунь”和“Сетунь 70”(“Сетунь”是莫大附近一条流入莫斯科河的小河的名字)。
    来源:百度百科:三进制

    如上面的资料所示,三进制已经做出来过了,而且在当初的时候不管是从价格还是性能上面都要远优于当时的二进制计算机,而且拥有二进制计算机所没有的优点,但是当时的苏联官僚认为不符合当时的经济计划,结果这种三进制计算机计划被无限搁置。

    我查了很长时间的资料,但是网上的资料不算多,最后也无法得出为什么没有流行的根本性原因,所以特意发来这里,看看有没有人能够解疑我多年的疑惑。

    问题是:

    1.如果现在是用三进制计算机的话会是怎么样的情况?

    2.在现有的技术去做三进制计算机会不会拥有超过二进制计算机的性能和优点?
    (不考虑制造二进制计算机所积累的经验,假设两种计算机的科技水平一致!)

    3.为什么没有流利下来?有缺点?还是如QWERT键盘对比DVORAK键盘一样,典型的“劣势产品战胜优势产品”?
    55 条回复    2014-05-27 13:16:28 +08:00
    WildCat
        1
    WildCat  
       2014-05-25 15:09:35 +08:00 via iPhone
    三进制如何用电路表达?
    Xs0ul
        2
    Xs0ul  
       2014-05-25 15:15:32 +08:00
    对于现在的计算机和程序,“不知道”这个应该很难用到吧?用1/3的可能结果来专门表示一个几乎用不到的结果,太浪费了。
    要用三进制表示“不知道”来开发模糊运算、人工智能,完全可以用两个二进制位来做,改用三进制并不会有质变。
    另外现在二进制计算机的技术,基本上没法用在三进制计算机上,完全得从头做起。
    hooluupog
        3
    hooluupog  
       2014-05-25 15:30:33 +08:00
    我感觉这个问题非常像:为什么早就有lisp理论上这么先进的东西存在了,但在现实世界中流行起来的却是"丑陋"的类c系列语言。Ternary computer现在还在不断研究,比如ibm一直在研究,和量子计算机也产生了关联,但这些还都在理论层面paper上,就像现在各种FP语言又热了起来,但实际生产环境中还是类c语言大行其道。
    zjgood
        4
    zjgood  
       2014-05-25 15:31:33 +08:00 via Android
    二进制符合阴阳理论。嗯,就是这样~
    Mutoo
        5
    Mutoo  
       2014-05-25 15:36:40 +08:00
    根据我了解过的资料,我大概只记得下面这两点

    1)三进制计算机是美苏冷战的产物
    2)三进制电子管不稳定
    akfish
        6
    akfish  
       2014-05-25 15:39:49 +08:00   ❤️ 8
    首先,把“接近人类的思维方式”作为评价计算机好坏的标准,是一种自大不切实际的标准。
    实际上,人类科学能走到今天这一步,很大程度上依赖于各种”反人类、反直觉“的理论。

    三进制为什么没能流行的原因,很大程度上是由底层硬件原理决定的。
    数字电路只能有效的表达开/关两种状态,所以原生二进制。
    DNA计算机是四进制,因为有ATCG四种碱基。
    量子计算机视最终能获得的量子叠加态数量,可能是更高进制的。

    如果计算机真是三进制的,用来老老实实编码,必然比增加一个“不知道”的位更经济、更高效。
    32位二进制bit能编码最大2^32-1的无符号数,而32位三进制bit能编码到3^32-1。
    假如CPU主频一致,同是32位长寄存器,3进制计算机的运算能力更强。

    真正要模糊计算的话,现在的做法是用fuzzy logic,给输出量同时赋予一个概率,这比起多一个非黑即白的“不知道”位,更加“接近人类思维方式”。
    palmers
        7
    palmers  
       2014-05-25 15:41:43 +08:00 via iPhone
    在计算机世界里 知道和不知道的中间值 要么知道 只是多少 真 要么不知道 得不到值 假 不会存在 你所说的模糊情况 人的思维的圆滑 不能直接运用在计算机上 为什么就经常有人说 程序 代码是不会骗人的 它不能也不会对我们说不知道 对和错 非常的鲜明 所以从这个角度来说 三进制取代二进制 没有讨论的必要性 他可以以 类似 八进制 十六进制形式存在
    wdlth
        8
    wdlth  
       2014-05-25 15:47:00 +08:00
    在电子上三进制不好进行表达,不过量子可以有多种状态,估计量子计算机可能使用三进制吧。
    akfish
        9
    akfish  
       2014-05-25 15:57:29 +08:00   ❤️ 5
    查了些英文的文档,百度百科的词条很多说法不靠谱。

    百度百科词条明显把三值逻辑运算和三进制编码给搞混了,三进制计算机底层编码采用的是平衡三进制(http://en.wikipedia.org/wiki/Balanced_ternary),优点是表达正负数同样容易,不存在有无符号的蛋疼。

    三进制计算机目前复活的可能性是光计算机(http://www.iop.org/EJ/abstract/1402-4896/2005/T118/025/)或者量子计算机(http://nextbigfuture.com/2009/08/qudits-multilevel-versions-of-qubits.html),可以很容易原生表示三进制。光计算机可以用无光表示0,两种正交极化方向的光表示+1或-1;量子计算机量子叠加态多到用不完,自然不用多说。

    这里有个三进制计算机的模拟器: http://tunguska.sourceforge.net/about.html

    总之,要学到靠谱的知识,远离百度百科。
    niseter
        10
    niseter  
       2014-05-25 16:05:26 +08:00
    @WildCat 断,通(AtoB的电流),通(BtoA的电流)我想应该是可以的
    andyhu
        11
    andyhu  
       2014-05-25 16:18:16 +08:00
    现代科技里半导体电子电路的基础就是通和断,这就是二进制的,电路里没法做出不知道通断。再比如说以前最老式的打孔计算机,一个纸带的同一位置上只会是有孔或者无孔,没有说不知道有没有孔这个概念
    世间万物也都有阴阳的属性,看似中性只不过是阴阳属性均等罢了。二是变化的最基本单元,所谓一生二 二生三 三生万物。
    sujin190
        12
    sujin190  
       2014-05-25 16:24:41 +08:00
    @niseter 明显的,你这是人的逻辑,用在电路中,你会蛋疼死的
    akfish
        13
    akfish  
       2014-05-25 16:26:59 +08:00
    三进制在电子计算机中的实现方式是:
    正电压 +1
    零电压 0
    负电压 -1
    等于是有两种不同的“开”状态。这会大幅度的增加系统的复杂度。
    所以也就只有早期晶体管数少的时候能造出来,随着规模的增加,按当时的科技水平,可能很快就会遇到瓶颈。
    如果当初整个行业真点了三进制的科技树,可能计算机运算能力的提升速度会严重变慢,摩尔定律不会出现,人类整体科技发展速度都会放缓。

    这个话题还是比较有意思的,至少成功的就要混到晚饭时间了。
    caiych
        14
    caiych  
       2014-05-25 16:28:16 +08:00
    @akfish 赞『首先,把“接近人类的思维方式”作为评价计算机好坏的标准,是一种自大不切实际的标准。』

    我们AI课老师当时说过一句话 不要一直说把自己当个机器觉得很鄙视机器一样,实际你要真能把自己当一个机器是把你的层次提高了
    lynnlee
        15
    lynnlee  
    OP
       2014-05-25 16:28:52 +08:00
    @WildCat 百科上的
    随着技术的进步,真空管和晶体管等传统的计算机元器件逐渐被淘汰,取而代之的是速度更快、可靠性更好的铁氧体磁芯和半导体二极管。这些电子元器件组成了一个很好的可控电流变压器,这为三进制逻辑电路的实现提供了可能,因为电压存在着三种状态:正电压(“1”)、零电压(“0”)和负电压(“-1”)。三进制逻辑电路非但比二进制逻辑电路速度更快、可靠性更高,而且需要的设备和电能也更少。这些原因促成了三进制计算机“Сетунь”的诞生。
    lynnlee
        16
    lynnlee  
    OP
       2014-05-25 16:31:58 +08:00
    @akfish 谢谢...远离百度百科
    robertlyc
        17
    robertlyc  
       2014-05-25 16:36:24 +08:00   ❤️ 1
    百度一下 你就上当
    cassyfar
        18
    cassyfar  
       2014-05-25 16:52:59 +08:00   ❤️ 1
    @lynnlee 二进制有一个状态叫dont care,用x表示,就是说当前取值1或0对结果都没有影响,比如一个OR gate,如果一个input是1,那么另外一个input就是x了。感觉和你所说的不知道比较像。但是实在无法联想到和机器学习还有人工智能有什么直接的联系。
    百科上那个随着科技的进步XXXXX,然后出现了正负和0电压。我感觉BJT和mosfet都没有这种状态。不知道前瞻到什么科技时代去了...... 其实二进制是目前最好的传统电路实现因为现在vlsi的mosfet特性就是这样的,可以去看看一个mosfet级的nor gate怎么实现的就能了解为什么二进制很不错了。
    jakwings
        19
    jakwings  
       2014-05-25 16:56:53 +08:00   ❤️ 1
    还是认为 1 楼一早就提到了瓶颈。电压通常不是说正负平的,而是高低与否。能否准确且低耗地实现三种状态才是第一重要的。
    jakwings
        20
    jakwings  
       2014-05-25 17:15:20 +08:00
    @wdlth 可以试一下 Google 的这个模拟器,听说最近的 D-Wave 量子电脑可以进行将运算过程逆过来进行:
    http://qcplayground.withgoogle.com
    leosama
        21
    leosama  
       2014-05-25 17:50:46 +08:00
    我个人觉得光纤可能没法三进?
    nicai000
        22
    nicai000  
       2014-05-25 18:06:39 +08:00
    相信这种文摘的到底懂计算机原理么?
    shoumu
        23
    shoumu  
       2014-05-25 19:09:52 +08:00
    晶体管上的电压不稳定吧,所以可能会产生很多错误。就如上面说的0电压表示0,这个是很难控制的
    jiang42
        24
    jiang42  
       2014-05-25 19:16:09 +08:00
    十进制流行的原因是我们有十根手指

    二进制流行的原因是电压高低表示自然、简单
    Actrace
        25
    Actrace  
       2014-05-25 21:21:51 +08:00
    简单既智能。
    yxz00
        26
    yxz00  
       2014-05-25 21:29:26 +08:00
    lz你看的是什么公开课?看看是哪个丢人现眼的学校老师。瞎掰人工智能也先读两本计算机书再来好吧。
    yxz00
        27
    yxz00  
       2014-05-25 21:30:05 +08:00
    简直误人子弟
    inee
        28
    inee  
       2014-05-25 21:32:45 +08:00
    编程语言和硬件的转化执行效率
    rannnn
        29
    rannnn  
       2014-05-25 22:00:17 +08:00
    我怎么记得上学插板的时候的时候电压根本不稳,根本不可能有0电压嘛。都是给个reference值然后超过多少表示1,低于多少表示0 =。=
    kawaiiushio
        30
    kawaiiushio  
       2014-05-25 22:31:29 +08:00
    @jakwings 不明觉厉
    Actrace
        31
    Actrace  
       2014-05-25 22:44:17 +08:00
    @rannnn 现代CPU都是半导体元件构建的,只有通和断。只要在正常工作电压下,即使有轻微波动,都不会影响计算准确性。
    pfitseng
        32
    pfitseng  
       2014-05-25 22:44:44 +08:00 via Android
    曼彻斯特编码
    zhouzm
        33
    zhouzm  
       2014-05-25 22:54:13 +08:00
    『相比之下,“三进制”逻辑更接近人类大脑的思维方式。因为在一般情况下,我们对问题的看法不是只有“真”和“假”两种答案,还有一种“不知道”』

    只有文科生才会这么想当然的联想吧,什么时候二进制里的0和1表达的意思是答案的“是”和“否”了?还冒出个“不知道”,要不再增加个“我不知道”,“你小子也不知道”,更接近大脑思维。

    计算机就是你给个算式(程序),它按你的要求算出个结果,这个结果就是一个数字,然后科学家和工程师们实践后,至少到目前为止二进制作为中间运算是最高效率的(包括制造工艺上)。

    至于你想用什么进制去表达这个数字,那随便你啦。
    sheldom
        34
    sheldom  
       2014-05-25 22:57:08 +08:00
    @akfish 的答案就已经很全面啦
    三进制计算机关键是材料问题吧,在计算上三进制是最优定义。
    而且你见过那种普通材料具有三个状态的,苏联的三进制严格来说应该算伪三进制。

    //
    e进制是信息表示的最优解先考虑最优的定义
    假定总共有n位,每位m个状态,m*n=v

    在v一定时,使得m^n最大

    也就是k(n)=(v/n)^n最大



    考虑一般情况下

    ln(k(n))=(ln(v)-ln(n))*n=ln(v)*n - ln(n)*n



    对n求导 ln(v) - (n*1/n + ln(n)) = ln(v) - 1 - ln(n)

    解得ln(n)=ln(v)-1是k(n)唯一的极值点

    易知是k(n)最大值点

    所以n=v/e m=e=2.71828182846时,k(n)最大

    显然3进制比二进制更接近e值
    //
    参考: http://www.zhihu.com/question/20194670
    lalalakakaka
        35
    lalalakakaka  
       2014-05-26 08:17:25 +08:00
    @sheldom
    对这个计算过程的理解没问题。。
    只是,V的意义是什么?为什么要以V=M*N为参考基准?
    jakwings
        36
    jakwings  
       2014-05-26 08:43:23 +08:00
    @kawaiiushio 看你楼上说的。要电压高于或低于指定阈值时才算 1 或 0 ,因为电压不稳。
    同样地,由于电压不稳,假如要用正电压、负电压、零电压来表示三种状态,除了要设定更多的阈值外,还要看有没有对应的低耗的状态监测工具。假如为了监测更多的状态而大大增大了电路的体积或电路材料的开销,那肯定是得不偿失的。量子电脑有先天优势,可以用量子来表示三种状态,可是量子电脑的造价,还不清楚,电脑能变得多小也不太清楚……
    jakwings
        37
    jakwings  
       2014-05-26 08:44:47 +08:00
    @kawaiiushio 不知道 @ 的哪一楼真辛苦,我也暂搞不懂那个 Google 模拟器。
    jakwings
        38
    jakwings  
       2014-05-26 08:48:12 +08:00
    @lalalakakaka 因为那是指具体有多少个电路单位。在同样的单位下,三进制理论上是最省材料的,可是以各种材料的体积和材料一样为基准的。
    jakwings
        39
    jakwings  
       2014-05-26 08:50:32 +08:00
    @jakwings 打错字。「……可这是以各种单位的体积和性价比一样为基准的,只是电路单位提供的状态不同。」
    jakwings
        40
    jakwings  
       2014-05-26 08:56:45 +08:00
    @lalalakakaka 请当我没说过,没看清楚那是总状态数。实际上应该考虑位的个数,还是状态的个数,应该要再看看具体运算时要怎么提高效率,所以我暂还是不太认同 @sheldom 的看法。
    rannnn
        41
    rannnn  
       2014-05-26 09:48:16 +08:00
    @Actrace
    虽然我只选修了一学期的EE的学渣。。。
    随便找了下Data Sheet,举例来说小霸王上的6502这种古老的CPU也是有高低电压的阀值定义的(Page 3)并不是简单的通断。
    http://www.mdawson.net/vic20chrome/cpu/mos_6500_mpu_preliminary_may_1976.pdf
    Actrace
        42
    Actrace  
       2014-05-26 10:00:04 +08:00
    @rannnn 为何如此较真...服了...
    rannnn
        43
    rannnn  
       2014-05-26 10:03:27 +08:00 via iPhone
    @Actrace 因为闲嘛😄😄😄
    jakwings
        44
    jakwings  
       2014-05-26 10:22:43 +08:00
    @lalalakakaka 发现我越想越混乱了,m^n 表示信息种类的个数,m*n 我想应该就是表示电路材料的数量,三进制能够用同样多的标准材料来容纳最多的信息。@sheldom 这样应该没理解错了?
    akfish
        45
    akfish  
       2014-05-26 10:33:51 +08:00
    @rannnn 这不光是可行与否的问题,理论上还可以把GND到Vcc之间分10个level,直接撸出十进制。
    但工程上还有更多的考虑,复杂度、可靠性、成本、可扩展性。
    虽然毛子撸出来那个三进制计算机号称可靠性更高,那也只是因为系统简单而已,而且也只是和当年的二进制电路比。
    现在i7 CPU晶体管的规模是14亿+,如果三进制,每个逻辑单元要有两条供电线,不管是布线还是EMC设计,比起二进制单供电线实现起来不是蛋疼了一点半点。

    我个人严重怀疑如果当年选择了三进制,到今天CPU能造出14亿+晶体管的规模。
    akfish
        46
    akfish  
       2014-05-26 10:46:44 +08:00
    @rannnn 好像@错人了

    然后你举的那个例子说明的不是数字电路“不是简单的通断”,而是在工程上如何实现了“简单的通断”。

    理想的数字信号是能瞬时从0跳转到1或者反之,时序图的上升/下降边缘是与时间轴垂直的,但实际中做不到,所以才需要一个触发阈值。

    最后达到的效果,依然是简单的通断。
    akfish
        47
    akfish  
       2014-05-26 10:49:32 +08:00
    eickegao
        48
    eickegao  
       2014-05-26 10:55:01 +08:00
    感觉三进制和二进制没啥区别。只要还是在进制上面做文章,整个计算机的体系就没啥本质的区别。
    rannnn
        49
    rannnn  
       2014-05-26 11:56:15 +08:00
    @akfish 目前本帖最好的解释。
    xdeng
        50
    xdeng  
       2014-05-26 13:20:06 +08:00 via iPhone
    进制越多 误差越大
    kurtis
        51
    kurtis  
       2014-05-26 14:34:51 +08:00
    以下为 三进制计算Demo

    运行程序:print 102+201*112*200*2
    运行结果:0 (不知道)
    seiwev
        52
    seiwev  
       2014-05-26 16:29:23 +08:00
    当时是二进制更便宜,容易实现。
    二进制也更清晰易懂。
    xgod
        53
    xgod  
       2014-05-26 17:39:26 +08:00
    量子bit还是2bit呢,还需要对应的逻辑理论来支撑,都不知道是不是我们有生之年能看到的产物。不是不用更多单位描述,而是局限于硬件,为了极致的利用硬件资源,才有了现在的计算机体系。比如内存管理等,如果底层不用线性存储,而是以树结构、网结构或图结构,现在算法理论将不会偏向于线性结构滴。要实现KV存储,只需要使用Trie树就可以了,多单纯,哈哈。
    BinaryHB
        54
    BinaryHB  
       2014-05-27 13:08:29 +08:00
    @akfish 其实我更好奇,为什么会有摩尔定律?晶体管一直越来越小,没有限度的么?
    akfish
        55
    akfish  
       2014-05-27 13:16:28 +08:00
    @BinaryHB 摩尔定律是对现象的一个描述,而不是现象的原因。
    晶体管的大小显然是有限制的,现在基本上已经快触顶了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2767 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:05 · PVG 08:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.