不用电的计算机(二)

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
转载请注明出处:https://blog.csdn.net/morningli/p/16058594.html

上一篇讲到最早的计算机是什么样的,有人可能会不服气,咱们中国的算盘才应该是计算机的祖宗才是啊。算盘应该算得上是一种计算工具,可以类比到现代计算机的存储,真正做运算的实际上还是人脑。最早的计算机实际上只能做一些简单的加减乘除运算,只能叫计算器,跟现在的计算机(俗称电脑)还差的很远。但是,今天说到的差分机比前面讲到的就更接近现代计算机了。

差分机的诞生

从17世纪到20世纪,计算器从手摇演变成了电动。但是整整三百年期间,计算器仍只能做最简单的四则运算,需要人力不断的记录计算结果,然后做下一步的运算。这种繁琐的人工操作能不能也交给机器来完成呢?第一个用实际行动验证这一想法的,是来自英国的旷世奇才——查尔斯·巴贝奇(Charles Babbage)。

差分机的设想,最早由一位名为约翰·赫尔弗里奇·冯·米勒(Johann Helfrich von Müller)的德国工程师在1784年提出,但他没有得到资金支持。

18世纪末,法兰西发起了一项宏大的计算工程——人工编制《数学用表》,这在没有先进计算工具的当时,是件极其艰巨的工作。法国数学界调集大批数学家,组成了人工手算的流水线,算得天昏地暗,才完成了17卷大部头书稿。即便如此,计算出的数学用表仍然存在大量错误。

巴贝奇在他的自传《一个哲学家的生命历程》里,写到了大约发生在1812年的一件事:

有一天晚上,我坐在剑桥大学的分析学会办公室里,神志恍惚地低头看着面前打开的一张对数表。一位会员走进屋来,瞧见我的样子,忙喊道:“喂!你梦见什么啦?” 我指着对数表回答说:“我正在考虑这些表也许能用机器来计算!”

巴贝奇耗费了整整十年光阴,于1822年完成了第一台差分机,它可以处理3个不同的5位数,计算精度达到6位小数,当即就演算出好几种函数表。第二台由英国政府出资的运算精度为20位的大型差分机差分机一号(Difference Engine No.1)由于当时的制造工艺落后等问题最终未能完成。1849年巴贝奇提出支持31位、7次差分的差分机2号(Difference Engine No.2)方案,却在有生之年只实现了很小一部分。

为什么叫差分机

差分机这个名字,源自其所使用的算法,是帕斯卡在1654年提出的差分思想:n次多项式的n次数值差分为同一常数。

我们来看一个一次多项式的例子,其中 Δƒ(x)  = ƒ(x+1) - ƒ(x)

我们再来看一个二次多项式的例子,其中 Δ1ƒ(x)  = ƒ(x+1) - ƒ(x),Δkƒ(x) = Δk-1ƒ(x+1)- Δk-1ƒ(x)

具体证明过程我也没能找到,大学学的数学都还给老师了。。。有知道证明过程的可以在评论区告诉我。

利用差分的方法,可以轻易把复杂高阶多项式的值通过重复进行加减法来计算。下面以一个二次多项式为例:

首先人工计算出  ƒ(1)、 Δ1ƒ(1)和 Δ2ƒ(1)的值,根据定义,有:

ƒ(2) = ƒ(1) + Δ1ƒ(1) ,  Δ1ƒ(2)  = Δ1ƒ(1)  + Δ2ƒ(1) , Δ2ƒ(2) = Δ1ƒ(2)

ƒ(3) = ƒ(2) + Δ1ƒ(2) ,  Δ1ƒ(3)  = Δ1ƒ(2)  + Δ2ƒ(2) , Δ2ƒ(3) = Δ1ƒ(2)

ƒ(4) = ƒ(3) + Δ1ƒ(3) ,  Δ1ƒ(4)  = Δ1ƒ(3)  + Δ2ƒ(3) , Δ2ƒ(4) = Δ1ƒ(3)

以此类推,可以不断地计算出后面的ƒ(x)的值。同理,更高阶的多项式也可以通过类似的方式求得:

差分机是怎么工作的

要使用差分法来计算多项式,那么机器必须能够完成以下功能:

  1. 输入并保存ƒ(1)、Δ1ƒ(1)、Δ2ƒ(1)、Δ3ƒ(1) …
  2. 计算 ƒ(k) + Δ1ƒ(k)、Δ1ƒ(k) + Δ2ƒ(k)、Δ2ƒ(k) + Δ3ƒ(k) 并保存和输出结果
  3. k = k+1 , 重复第二步

存储单元

差分机通过一系列同轴齿轮来存储数字,每个齿轮可以存储10个数,最高可以存储31位的十进制数。

差分机最多可以存储8个数,最高能计算7次方的多项式

计算

并行化算法

跟早期的计算器类似,差分机也是通过齿轮的转动进行加减法。巴贝奇先把串行的计算流程并行化。未优化的差分法每次运算只能计算一次加法,对于7阶计算需要运算7步才能得到结果

对于机械设计而言,串行控制远比并行控制成本更高,因为下一个运算必须要等待上一个运算结束,巴贝奇通过并行化将7步简化成了2步:

首先,简化后的步骤需要人工计算更多的数字,这对于提升的性能而言显然是值得的,下面以7阶计算为例:

第一步,将第1个数和第2个数、第3个数和第4个数、第5个数和第6个数、第7个数和第8个数相加:

第一步计算结束后更新第1、3、5、7个数:

第二步,将第2个数和第3个数、第4个数和第5个数、第6个数和第7个数相加:

第二步结束后,更新第2、4、6个数:

继续上述两个步骤,就可以源源不断地计算出ƒ(x)的值。

整个流程看起来是这样的,值得注意的是,现在这几个存储里面的x值并不相同,但是这并不影响计算。

计算和进位

每个齿轮都有4组从0到9的数字,每个0跟9的交界处会有一个突起用来提醒进位

进位装置

进位这里不进行细述,有兴趣的可以通过引用里的链接了解更多。

两个齿轮可以简单完成加法操作,只需要先分开两个齿轮,把第二个齿轮转到到需要加的值,合拢两个齿轮,顺时针转动第二个齿轮转到0,第一个齿轮就会自动加上第二个齿轮的数字。

但是这个方法有个问题,转动后第二个齿轮的数字就已经丢失了,所以巴贝奇在中间加了第三个扇形轮:

这个扇形轮有三种模式:咬合两个齿轮、只咬合第二个齿轮和两个齿轮都不咬合。在进行累加时,扇形轮与两个齿轮咬合,在转动第二个齿轮的时候会带动第一个齿轮进行累加;完成运算后,扇形轮抬起只与第二个齿轮咬合,带动第二个齿轮恢复到原来的数字。

因为篇幅有限,本文先讲到这里,感兴趣的可以通过后面的链接来了解更多。最后,大家可以通过这个视频来感受一下差分机的精妙:https://www.bilibili.com/video/BV1MW41177yh/?spm_id_from=autoNext。在下一篇,我们将会进入电气时代,了解下真正的现代电子计算机。

引用:

https://xueqiu.com/3993902801/81799392

https://zhuanlan.zhihu.com/p/107462919

https://www.bilibili.com/video/BV1rt4y1S77M?spm_id_from=333.999.0.0

https://www.bilibili.com/video/BV1mt411C7gw?p=1

https://zh.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E6%A9%9F

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

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

相关文章

JS 数组 各项操作

构建数组(Array) var a new Array(); //创建Array对象 var a new Array; //创建Array对象 var a new Array(10); //创建Array对象,并指定数组中项的个数 var a new Array("a","b","c"); //数组a,b,c var a ["a","…

CocoaPods did not set the base configuration of your project 问题解决方案

今天在使用pod install的时候,出现了 [!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configuration…

OpenSSH 密钥管理:RSA/DSA 认证(转载)

我们中有许多人把优秀的 OpenSSH用作古老的 telnet 和 rsh 命令的替代品,OpenSSH 不仅是安全的而且是加密的。 OpenSSH 更加吸引人的特性之一是它能够使用基于一对互补的数字式密钥的 RSA 和 DSA 认证协议来认证用户。RSA 和 DSA 认证承诺 不必提供密码就能够同远程…

在UnityUI中绘制线状统计图

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 先来个效果图 觉得不好看可以自己调整 1.绘制数据点 线状图一般由数据点和连线组…

HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面

错误原因为 IIS 扩展信息中午此扩展 标签: 今天,在vs2013中新建了一个placard.json文件,当我用jq读取它的时候,去提示404,直接在浏览器访问这个文件,提示: HTTP 错误 404.3 – Not Found 由于扩…

国企开会特点

1、领导讲话只有目标性没有整体逻辑性:想哪说哪 2、有些讨论会什么基本上都是领导一个人在开会,其他人都是听着;领导讲到差不多,如果想起来会问大家还有什么问题吗?如果没想起来就这么地 一个领导讲来讲去也就那么点干…

一行代码,让 VS Code 内置 PDF 阅读器变成深色模式

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 许多人会用 VSCode 写 LaTeX,等等,都会用到 PDF 预览。VSCo…

雷军:互联网思维本质上就是群众路线

第一、小米的极其强调真才实料做好产品。应该来说小米发布这产品,在发布之初就具备了非常高的品质。第二、小米很愿意倾听用户的意见,和用户做朋友,把用户全部拉进来,一起把产品做好。第三、小米用了互联网的技术,电商…

NSURL中fileURLWithPath和URLWithString

NSString *str"http://t3.qpic.cn/mblogpic/d05a8de7423b76095d7c/460"; NSURL *url1[NSURL fileURLWithPath:str]; NSURL *url2[NSURL URLWithString:str]; NSLog("url1%",url1); NSLog("url2%",url2);输出结果为:url1h…

魏晋风度与世说新语

建安七子:是汉建安年间(196—220年)七位文学家的合称,包括孔融、陈琳、王粲、徐干、阮瑀、应玚、刘桢。竹林七贤:(三国魏)成名较“建安七子”晚一些,魏正始年间(240-249)嵇康、阮籍、…

CesiumJS 2022^ 原理[2] 渲染架构之三维物体 - 创建并执行指令

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 目录* 回顾 预备知识:指令 预备知识:通道 1. 生成并执行…

Selenium2Library+ride学习笔记

一、环境部署 1.安装python2.7编译环境、ride环境以及Selenium2Library环境,环境部署可参见前面几节。 2.启动RIDE编译环境,导入Selenium2Library库。     3. 执行F5,可查看Selenium2Library自带的关键字(Keyword)。 二、常用关鍵字解释 1. open b…

Android——线程通讯 Handler、Looper、Message;

线程通讯问题 (主要用到了Handler类,Looper类和Message类以及MessageQueue) 在Android中主线程如何向子线程中发送消息的问题。让我们来想想,这其中的过程,无非就是创建一个Handler对象,然后一个线程发消息…

关于flash网页播放中wmode和direct

网页中播放带有stage3d内容的时候&#xff0c;必须加上 <param name"wmode" value"direct" /> 不然就不能正常显示&#xff0c;比如下面这段代码&#xff1a; <object width"400" height"300" data"http://files.cnblo…

Abp 实现通过手机号注册用户

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 前言 Abp 的 Identity 模块&#xff0c;实现了用户的管理&#xff0c;但是对于国…

android 开发不能创建目录

原来代码&#xff1a; File tempDir new File(path); //path 是一个参数if (!tempDir.exists()) {try {tempDir.mkdir(); //mkdirs 可创建多级目录&#xff0c;mkdir只能创建以及目录} catch (Exception ex) {Log.e("mkdir", "创建文件目录失败" ex.toS…

NumericUpDown使用备注

NumericUpDown使用 常用属性 DecimalPlaces 指示要显示的小数位数 Increment 每单击一下按钮时增减的数量 Maximum 最大值 Minimum 最小值转载于:https://www.cnblogs.com/blackice/archive/2012/11/12/2766417.html

关于Electron框架应用的安全测试

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 Electron框架应用的安全测试 0.Electron相关简介 electron.js是一个运行时框架&…

Exchange 2010 创建设备室邮箱

其实创建设备邮箱和创建会议室邮箱都差不多&#xff0c;只是在新建邮箱的时候&#xff0c;邮箱的类型选择的不一样&#xff1b;1、打开Exchange管理控制台&#xff0c;展开“收件人配置”选择“邮箱”节点&#xff1b;在中间空白的地方右击选择“新建邮箱”&#xff1b;或者在操…

AC日记——3的幂的和 51nod 1013

3的幂的和 思路&#xff1b; 矩阵快速幂&#xff1b; sn-1 3 1 sn * 1  0 1    1 来&#xff0c;上代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace…