【周末闲谈】二进制VS三进制

简介: 【周末闲谈】二进制VS三进制

前言


💻作为计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展,了解电脑原理的人就知道,现代的计算机和依赖计算机的设备里都使用二进制,但我们有没有思考过为什么?🤨今天就让我们来谈谈为什么电脑使用的是二进制吧🚗🚗🚗


一、效率?ㄟ( ▔, ▔ )ㄏ


我们使用二进制是因为它的效率最高吗?

很遗憾,事实上很早就有人否定了这个观点。

让我们拿100⁹⁹与99¹⁰⁰来举个例子吧,

如果我们要想知道它们那个更大,通常我们们使用十进制就可以得到:


9bcc1541147383168f68ccbfa404c732_37e2267dd380456ab501c9c356373341.png


你会发现:无论是99个100,还是100个99,加起来都是9900。

所以这个问题变成了:如果你把9900拆成几个数的和,然后把它们乘起来,什么时候乘积最大?

当我们把9900拆成一大堆正整数的和,让它们的乘积最大,我们不难发现拆成3300个3时,它们的乘积最大,这是巧合吗?🤷‍♂️🤷‍♂️🤷‍♂️


试想想:大家一定玩过算珠吧,如果给你100个珠子,你最多能表示出多少个数呢?

如果算珠使用的是10进制,那每一位的柱子上需要有10个珠子,100个珠子可以串满10根柱子,也就是能表示出十位数,总共能表示1010个数;

如果用5进制,即每一根柱子上需要串5个珠子,一共能串满20位,也就是能表示520个数

以此类推,我们列出一个表格:


80b43664e24a449df16e435145dbf1ae_6a468914806246958ab4135f0b938e72.png



我们不难发现:同样用100个珠子,使用3进制——每根柱子上串3个珠子,表示33位,效率是最高的,它能表示出最多的数字!

我们还可以把进制x作为横坐标,把100个珠子在这种进位制下能表示的数作为纵坐标,画出一幅图,你会发现,在进位制是e=2.71828…时表示的数最多!这个数就是自然常数e!它是一个和圆周率π一样神奇的无理数


为了表示 M 个数,在 x 进制下,需要 x*logx^M 个珠子

所以效率就可以表示成这样一个公式:


8c58c8e035070bbd86e5047f1936de50_b49b79f84a7a48cfa0f3ceb71464aec6.png


那么它何时取最大值呢?我们求导看看:f`( x ) = MlnM ( 1-lnx ),显然当我们x=e时有最大值。


1684813383364.png


所以效率最高而选择它的解释是行不通的


二、三进制计算机?(+_+)?


五十年之前我们的老大哥苏联就发现了三进制在计算机上的优势。


1958 年,莫斯科国立大学的计算机研究中心研制出了世界上第一台三进制电子计算机 —— Сетунь( setun )。Сетунь 计算机用的不是一般那种逢三进一的三进制,而是平衡三进制,也叫对称三进制。


也许有的同学就要问了什么是平衡三进制🧐🧐🧐?


所谓的平衡三进制就是由 -1、0、1 构成的,对应的逻辑电路就是负电压、零电压和正电压。


平衡三进制是一种很巧妙的设计,它所记录的数字可以表达出全部整数。而且由于 -1 的引入,对负数就不必使用额外的负号了,而二进制是无符号数,不能直接表示负数。


不过从没有人看好这台机器,他们觉得这个经济计划之外的玩意儿就是个科幻产物。

当国内外的订单却像雪花般飞来,10 到 15 台的年产量远远不够应付市场需求。当时的苏联工业部却并没有随着订单数量的增加而增加产量,相反,他们严重限制了生产进度,拒绝订单,并在 1965 年完全停产。也许听起来不可思议,其实原因并不复杂,Сетунь 的电子元件良品率极高,而且非常耐造,同时价格还很低,它的售价只有 27.5 万卢布,创造了当时的最低记录,而同期的计算机售价基本都在它的两倍以上。

那台在莫大计算中心的样机整整运行了 17 年,除了在第一年更换了三个有缺陷的元器件之外,内部设备从来没维修过,直到它被摧毁前的一刻都还能正常使用。

而苏联官僚停产了 Сетунь 之后,取而代之的是一种相同性能的二进制计算机,但价格却贵出 2.5 倍。


说白了,Сетунь 的生产让苏联官僚少了大笔的财政拨款,三进制计算机就 “ 理所应当 ” 的成为了当时的政治牺牲品。


三进制计算机的最后(┬┬﹏┬┬)


Сетунь 最终只生产了五十台,我们可以从加里宁格勒到雅库茨克,从阿什哈巴德到新西伯利亚,全苏都能看到它的身影,证明它曾经存在过。各地都对 Сетунь 的评价很高,大家认为它编程简单,很适合用于工程计算、工业控制、计算机教学等等。Сетунь 的成功经验让莫大决定不放弃这台计算机,于是他们顶住压力在 1970 年推出了 Сетунь 70 型计算机,而且还对应着二进制的 byte 创建了三进制字节 tryte。每个 tryte 由 6 个 trit 构成,约等于 9.5 个二进制的 bit。但这个项目长期得不到上级的支持,最后也不得不无限期停滞。Сетунь 70 就此成了莫斯科大学的绝唱。再后来苏联解体,三进制计算机也跟着苏维埃混入了历史的尘埃,直到今天也没有其他国家能够复现它。


总结


在《计算机应用基础》一文中写到:“理论上e进制是最优的进制,考虑到取整数,三进制是实际可用的最优进制,但是考虑到尽可能简化硬件电子器件的设计与制造,现代电子计算机系统的设计普遍基于二进制”。也需在未来的某一天,我们可以重新看到三进制计算机重新出现在我们的生活中。

相关文章
|
Linux 网络安全 开发工具
校外网络连接校园网内的linux服务器方法(使用frp实现内网穿透)
平常在校园里连接校内实验室的linux服务器可以直接使用ssh直接链接私有ip地址,一旦本地移动到了校园网外部(如:使用手机流量wifi,或着暑假回家使用家庭wifi)便无法在使用ssh连接校内的服务器。本文提供一个实现校外也能访问校内服务器的方法
7357 0
校外网络连接校园网内的linux服务器方法(使用frp实现内网穿透)
|
人工智能 并行计算 程序员
【AI系统】SIMD & SIMT 与芯片架构
本文深入解析了SIMD(单指令多数据)与SIMT(单指令多线程)的计算本质及其在AI芯片中的应用,特别是NVIDIA CUDA如何实现这两种计算模式。SIMD通过单指令对多个数据进行操作,提高数据并行处理能力;而SIMT则在GPU上实现了多线程并行,每个线程独立执行相同指令,增强了灵活性和性能。文章详细探讨了两者的硬件结构、编程模型及硬件执行模型的区别与联系,为理解现代AI计算架构提供了理论基础。
4573 12
|
人工智能 IDE 测试技术
魔搭×通义灵码:0代码基础、0门槛在线编程做应用
本节课主要介绍了如何利用 Notebook IDE 环境和通义灵码工具来具体开发 AI 产品,通过前面的介绍,可以感受到好的开发环境和开发工具往往可以让开发过程事半功倍,也可以更快更好地解决一些实际问题。随着 AI 代码生成工具不断成熟,动动手指,你的 AI 产品马上变成现实~
1038 9
|
人工智能 前端开发 API
人人都是应用开发者:AI时代的全栈产品经理实践
本文试图最短路径、最轻模式来做一个应用,实现一个需求!仅需三大步+9小步,以下为手把手教学流程。
1074 10
|
人工智能 前端开发 JavaScript
在线课堂|基于Springboot+Vue实现在线学习平台
本项目基于Springboot和Vue开发实现了一个大学生在线课程学习平台。平台用户有三类:学生、教师、管理员。学生注册登录后可以查看相关课堂,在线播放课程视频进行学习,并可以购买课程,完成课程交易,对课程进行评价,添加学习记录进行记录,在线咨询留言等。教师账户由管理员分配,登录后可以添加课程,添加课程对应的学习视频,查询课程评价并进行回复,查看学生的学习记录,回复学生咨询信息等。管理员主要对平台的所有信息进行相应的管理,包含学生管理、教师管理、课程管理、分类管理、视频管理、咨询管理、学习记录管理、轮播图管理、友情链接管理等,并包含了课程销售的图形报表统计,采用Echart来进行实现。具体见下
1439 0
|
安全 Android开发
游戏封包,你会了吗?
游戏封包,你会了吗?
1629 1
游戏封包,你会了吗?
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
Web App开发 Java
使用java操作浏览器的工具selenium-java和webdriver下载地址
【10月更文挑战第12天】Selenium-java依赖包用于自动化Web测试,版本为3.141.59。ChromeDriver和EdgeDriver分别用于控制Chrome和Edge浏览器,需确保版本与浏览器匹配。示例代码展示了如何使用Selenium-java模拟登录CSDN,包括设置驱动路径、添加Cookies和获取页面源码。
1231 6
|
算法 Python
SciPy 教程 之 SciPy 优化器 3
SciPy 的 optimize 模块提供了多种最优化算法,如查找函数最小值或方程的根。通过 `optimize.root` 可以解决非线性方程,而 `minimize` 函数则用于最小化目标函数,支持多种优化方法。例如,使用 BFGS 方法最小化函数 \(x^2 + x + 2\),可得到最小值 1.75 和对应的 x 值 -0.5。
436 1
|
存储 JSON 前端开发
jwt超详细配置和教程
jwt超详细配置和教程
718 2

热门文章

最新文章