机械时代的计算

1、机械计算起源

        最近在想平衡三进制的除法,想看看那么大牛是怎么做的,资料很少,但还是有的,有但是看不懂,也不知靠不靠谱,后面跟着实践了能行,下面就看看Balanced Ternary Arithmetic,这个高德纳(Donald Knuth)写出有关平衡三进制的文章,而这思路又起源于巴贝奇的机械结构。

        巴贝奇最牛的地方在于,他将人的数学计算,转变成了机械可以运算的的题,在1834年的夏天到1836年期间,他给它的新引擎注入了令人赞叹的功能,他设计了第一个自动装置,可用于直接乘法与除法,它的除法过程也很特别,很震撼,他指出:“机器的算术运算,没有什么比这更困难的了”,在查尔斯·巴贝奇的分析机出现后,也演变出了手摇或电动机械计算器,接下来看看Integer Long Division的文章,它们是如何实现除法的。


2、十进制机械除法

        最简单的除法就是减法,10/3就是10-3-3-3=1,所以就是商3余1,也就是累计可以减多少次,剩下多少就是余数,下面是以1234/38为例:

这种是不移位重复减法,注意了上面p是变成了负数的,然后又变了回来,为什么这样做,是因为机械齿轮的设计,很难分辨数的大小,就算是能分辨,设计也很复杂,还不如一直减,直到负数停止,然后再回退上一步的结果,也就是结束后再加回去,它的运算过程:

  1. 清除寄存器【r】的结果
  2. 重复从【p】中减去【q】,每次都将1加到结果寄存器【r】中,直到【p】变成负数
  3. 撤消之前的减法,将【p】加上【q】,结果寄存器【r】减1,得到上一步的结果,除法完成:最终商在【r】中,余数在【p】中。

        上面的方法,虽然简单暴力,但是效率很差,举一个极端的例子:100000000000/1,如果重复的相加那么手摇计算机,就变成的健身器材了,这并不是我们想要的,所以就有了第二版,有移位的减法,如下所示:

        上述除法思路,用的还是巴贝奇的想法,根据结果采取适当的措施,即: 用试探性减法,直到结果为负数,而得到负号,就表示数字多了一个,通过加法恢复正确的数字,然后将商乘以10,重复进行减法运算;通过计算,每个阶段在符号位变化前执行的减法次数,可依次生成除法结果的各位;也就是1234/38,不断的在38后面加0,到2个位移<<,加2个0时,得3800,1234变成负数,然后撤消之前的减法,得到1个位移<,(即r左移1位变成00,q右移1位变成380),然后减1次就加-380,加到第4次时又变负数,撤消之前的减法,得到0个位移<,4变成3,商乘于10变成30,(即r左称1位变30,q右称1位得38),然后减1次就加-38,再次减负数,这时除法结束,最后一次撤消之前的减法(与原q相同,无移位),得到最后的商32和余数18,它的运算过程:

  1. 清除寄存器【r】的结果
  2. 通过将【q】向左移并用移位机制(s)跟踪,将【q】的最高位与【p】的最高位对齐
  3. 反复从【p】中减去【q】,每次都在结果寄存器【r】中加1,直到【p】变成负数
  4. 通过【p】加回【q】,并将【r】减1,撤消之前的减法。看【q】是否要移位;若是,则将【r】左称1位,将【q】右移1位,回到步骤3继续开始。
  5. 否则,【q】不再移位,则除法完成,最终商在【r】中,余数在【p】中。

3、平衡三进制除法

       最终讲这一部分了,这个是高德纳写的,符号他直接采用了-1、0、1,这个排版起来,不太好看懂,下面我还是用+\0\-来说明,如下图所示:

        这个平衡三进制除法很特别,首先,将被除数分成两个向量 p 和 s,其中 p 的位数最多与除数 (q) 相同,s 是剩余位数的向量;比如,这+-++-(十进制65) /+--(十进制5),也就是p为+-+,s为+-,而除数q为+--,然后就是除数q乘于(+或-)与被除数p相减(实际上相减1次或2次),直到p位于一个半封闭区间内(上图可知),每一步的结果(+或-),都要加到r上去,当 p 减少到位于 q 所限定的区间内时,结果乘以 3(通过附加0)并将 s 的下一位数字转移到 p。当 s 用尽时,结果 r 和被除数 p 构成最终的商和余数。


        说实话是不是,看不懂了,没事刚开始我也看不懂,写多两题就懂了,先要清楚它的半封闭区间,它的区间是由除数构成的,也就是p是正数时,0<=p<5这区间,当p是负数时,0>=p>(-5)这区间,如下图右下角的区间示意图;它的运算过程,就是将【p】减去【q】,然后判断【p】是否在这两个半封闭区间内,不是则继续减,实际只要减去1次或2次就可以了,符合后将 s 的下一位数字转移到 p中,结果乘于3(通过附加0),这也非常简单的,下面就用+-++-(十进制65) /+--(十进制5)例子,计算如下:

        共算了三步,每一步,都只相减了1次,也就是+-(十进制2),当p与q符号相同时上+,反之上-,它们相减等于加上它的相反数,而余数2是在这两个半封闭区间内,所以就可以转移s,当s都移完了,就可以得商+++(十进制13)和余数0。


此方法是通用的,下面继续算10/-2,如下图所示:

在上图中,符号不同则上了-,然后第一轮相减得1,符合半封闭区间,进行下一轮,r的-变-0,然后+变++,与-+相减1次得2,但半封闭区间不包含2,所以要再相减1次得0,符合半封闭区间,s用完,结果即(-0)+(-+),得到-++(十进制-5)和余数0,结果正确。   


下面,再来一题:+0++0+(十进制280)/+0-(十进制8)

这个最有用的就是提醒你,什么时候是上0,而不是只上+或-,也就是当s的位数移过来时,并没有相减时,也符合半封闭区间,所以就上0了,虽然上0了但移位还是要的,这里有4个步骤,所以结果是++0-(27+9+0-1=35)和余数0,结果正确。


最后,来2道简单的,4/2及9/2,如下图:

这文章Balanced Ternary Arithmetic中还有很多有趣方法,比如快速除于3的方法等,细细品读,你会获得不一样的收获,比如头顶掉落的一撮毛。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87621.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相机光学(四十八)——渐晕

1.什么是渐晕 渐晕&#xff0c;又称“光衰减”&#xff0c;在光学和摄影中很常见&#xff0c;简单来说就是与中心相比&#xff0c;图像角落变暗。渐晕要么是由光学引起的&#xff0c;要么是在后期处理中故意添加的&#xff0c;目的是将观看者的视线从角落的干扰物吸引到图像的中…

LabVIEW多通道阻抗测试仪

LabVIEW集成 Keysight 数字万用表与 NI 矩阵开关卡&#xff0c;构建多通道阻抗测试系统&#xff0c;实现设备连接电缆的多芯阻抗自动化测试&#xff0c;涵盖数据采集、分析、记录与显示功能&#xff0c;适用于高精度阻抗检测场景&#xff0c;展现LabVIEW在仪器控制与自动化测试…

MySQL的5.0和8.0版本区别

目录 1、MySQL版本-- 》5版本 1.1、InnoDB存储引擎 1.2、存储过程和触发器 1.3、视图 1.4、增强的查询优化器 1.5、增强的索引支持 1.6、外键支持 1.7、分区表和分布式查询 2、MySQL版本-- 》8版本 2.1、性能 2.2、字符编码改变 2.3、持久化保存 2.4、隐藏索引和降…

python实现简单的地图绘制与标记20250705

用python语言绘制显示范围不大于上海地区的地图 您的代码实现了一个 上海武馆地理信息系统&#xff0c;主要功能是通过可视化地图展示上海各区的传统武术馆信息。 通过和deeps对话一晚上实现的&#xff0c;我就是描述修改 高德的api key我搞了一会&#xff0c;平时很少接触密…

Qt开发:QListWidget的介绍和使用

文章目录 一、QListWidget的简介二、QListWidget的基本用法三、QListWidget的数据操作2.1 插入数据2.2 查找数据2.3 选项设置 四、QListWidget的信号与槽 一、QListWidget的简介 QListWidget 是 Qt 框架中用于显示和操作条目列表的控件&#xff0c;它是 QListView 的一个子类&a…

React Native 亲切的组件们(函数式组件/class组件)和陌生的样式

写多了taro, 看见react native中的组件好亲切啊&#xff0c;几乎一模一样。 一、函数式组件 — 常用 1&#xff09;无状态&#xff0c;每次刷新都是生成一个新的状态 2&#xff09;基于状态变化的管理 3&#xff09;简洁&#xff0c;代码少&#xff0c;易于服用 import Reac…

Spring boot之身份验证和访问控制

本文笔记跟随于遇见狂神说老师的视频 一.SpringSecurity&#xff08;安全&#xff09; 1.相关概念 在web开发中&#xff0c;安全第一位&#xff0c;有简单的方法&#xff0c;比如&#xff1a;拦截器&#xff0c;过滤器 也有安全框架&#xff0c;比如&#xff1a;SpringSecu…

C#使用开源框架NetronLight绘制流程图

之前使用MindFusion.Diagramming绘制流程图确认很方便&#xff0c;只能试用版&#xff0c;如果长期使用&#xff0c;需要收费。 C#使用MindFusion.Diagramming框架绘制流程图(2):流程图示例_c# 画流程图控件-CSDN博客 这里找一个简易开源框架NetronLight&#xff0c;GIT下载地…

支持向量机(SVM)在脑部MRI分类中的深入应用与实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

AtCoder AT_abc413_c [ABC413C] Large Queue 题解

题目大意 有一个初始为空的序列 A A A&#xff0c; Q Q Q 次操作分为两类&#xff1a; 第一类&#xff1a;将 c c c 个 x x x 放到 A A A 的末尾。第二类&#xff1a;将前 k k k 个数的和输出并移除它们。 思路 这是一个求和问题&#xff0c;想到的第一个思路是前缀和…

「源力觉醒 创作者计划」_文心大模型开源:开启 AI 新时代的大门

在人工智能的浩瀚星空中&#xff0c;大模型技术宛如一颗璀璨的巨星&#xff0c;照亮了无数行业前行的道路。自诞生以来&#xff0c;大模型凭借其强大的语言理解与生成能力&#xff0c;引发了全球范围内的技术变革与创新浪潮。百度宣布于 6 月 30 日开源文心大模型 4.5 系列&…

Git 怎么判断是否冲突?

&#x1f4cc; [Q&A] Git 怎么判断是否冲突&#xff1f; Git 使用的是三路合并算法&#xff08;Three-way Merge&#xff09;&#xff0c;它比较&#xff1a; 共同祖先提交&#xff08;base&#xff09; 当前分支的改动&#xff08;ours&#xff09; 被合并分支的改动&am…

在sf=0.1时测试fireducks、duckdb、polars的tpch

首先&#xff0c;从https://github.1git.de/fireducks-dev/polars-tpch下载源代码包&#xff0c;将其解压缩到/par/fire目录。 然后进入此目录&#xff0c;运行 SCALE_FACTOR0.1 ./run-fireducks.sh&#xff0c;脚本会首先安装所需的包&#xff0c;编译tpch的数据生成器&#x…

AWS多账号管理终极指南:从安装配置到高效使用

引言:为什么需要多账号管理? 在云计算时代,企业使用多个AWS账号已成为最佳实践。根据AWS Well-Architected Framework,多账号架构可以: 实现环境隔离(生产/测试/开发)满足不同业务单元的安全要求简化资源管理和成本分配符合合规性要求(如SOC2、ISO27001)本文将手把手…

UE5音频技术

1 . 调制器 Modulator 调整参数 调制器可以使声音每次音高都不一样 2. 随机 节点 3. 混音器 Mixer 混合两个音频 4. 串联器 Concatenator 按循序播放 5.多普勒 Doppler 根据距离音频变化 6.包络线 Enveloper 武器充能发射 7.混响

创客匠人视角:创始人 IP 打造与知识变现的培训赋能体系

在知识付费行业进入精耕期的当下&#xff0c;为何部分企业投入大量培训却收效甚微&#xff1f;创客匠人 CEO 老蒋通过服务 5W 知识博主的经验指出&#xff1a;唯有将创始人 IP 思维与培训体系深度融合&#xff0c;才能让培训成为知识变现的 “转换器”。一、内训体系重构&…

基于Java+SpringBoot的三国之家网站

源码编号&#xff1a;S591 源码名称&#xff1a;基于SpringBoot的三国之家网站 用户类型&#xff1a;双角色&#xff0c;用户、管理员 数据库表数量&#xff1a;20 张表 主要技术&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 运行环境&#xff1a;Windows/Mac、…

推荐算法系统系列五>推荐算法CF协同过滤用户行为挖掘(itembase+userbase)

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 配套视频 推荐算法系统实战全系列精品课【陈敬雷】 文章目录 推荐算…

pytest之fixture中yield详解

1. fixture——yield介绍 fixture的teardown操作并不是独立的函数&#xff0c;用yield关键字呼唤teardown操作。前面通过fixture实现了在每个用例之前执行初始化操作&#xff0c;那么用例执行完之后&#xff0c;如需要清除数据&#xff08;或还原&#xff09;操作&#xff0c;…

Nginx 动静分离原理与工作机制详解:从架构优化到性能提升

前言&#xff1a;在 Web 应用架构不断演进的今天&#xff0c;如何高效处理日益增长的访问量和复杂的业务逻辑&#xff0c;成为开发者必须面对的挑战。当我们在浏览器中打开一个网页&#xff0c;那些直观可见的 HTML 页面、精美绝伦的图片、流畅运行的 JavaScript 脚本&#xff…