数字电路计算器
下面介绍一种利用数字电路加法器,减法器,乘法器除法器,进行算术计算的计算器。这种计算器通过按键输入公式,经过数字电路的加法器,减法器,乘法器,除法器计算后得到计算结果,最后再将计算结果输出到数码管上面。该计算器首先通过晶振产生32768HZ的谐振方波信号,再经过分频电路将这个方波信号的频率降低为100HZ,,即周期为0.01秒,再将这个100HZ的信号接入到按键的公共端,按键共有60个,它们的一端接到一起,另外一端分别接到倍频器上。相当于这些按键并联在一起,当某个按键被按下时,100HZ的信号就会接入到倍频器上,经过倍频后,频率变为1HZ。为什么按键上面的频率是100HZ,这是因为100HZ的频率,周期是1毫秒,通常使用者按下按键的时间在1毫秒左右,所以,只有这个频率的信号才会在按下按键时输入到后级电路中。键值计算电路由十进制转二进制电路组成,当有数字键按下时,对应的数字按键输出端输出对应的数值。数值按键的输出端接上或门,或门两两相接,最后输出一个或门,当有任何计算符号按键按下时,或门输出高电平,或门后面接上计数器,计数器记录按键按下的次数,当有按键按下时,计数器将对应的次数输入到加法器,加法器给键值乘以10,100,1000,等倍数。当连续按2次按键时,需要用乘法器给键值乘以10,连续按下3次按键时,需要用乘法器给键值乘以100,依次类推。所有数值按键的输出端连接到一起,输出到计算符号电路,进行计算。
电路图下载网址:
数字电路计算器
链接:https://pan.baidu.com/s/14YTx3SP3dH7aLmwFYIhKXg?pwd=12h9
提取码:12h9
链接:https://pan.baidu.com/s/19SY8ka4Imz4q2_5huDQcMA?pwd=81s7
提取码:81s7
数字电路计算器下载地址:https://share.weiyun.com/Vr9z78sb
https://115.com/s/sw6zzp636zv?password=ha14#
数字电路计算器
访问码:ha14
「数字电路计算器」https://www.aliyundrive.com/s/ByFESWzXyv6
https://kdocs.cn/join/ge5wqfb?f=101
计算符号编码电路产生对应计算符号的编码,输送给计算符号按键电路。用计算符号按键输入计算符号±×÷,cos,sin,ln,log,等,计算符号按键的输出端接上或门,或门两两相接,最后输出一个或门,当有任何计算符号按键按下时,或门输出高电平,或门后面接上计数器,计数器记录按键按下的次数,当有按键按下时,计数器将对应的次数输入到加法器,加法器将对应计算符号接入数值电路,进行计算。每个计算符号按键的后面接上一个或非门,再加上一个与门,最后它们两两之间接上或门,最后一级是一个或门。这个或门输出刚刚按下的计算符号的编码到计算电路,当按下一次计算符号按键时,进行一次计算,输入到存储器,存储器在将数值和上面最近一次按下的计算符号编码输入到计算电路进行计算,
每一个计算符号按键对应一个计算电路,分别有开方电路,开立方电路,sinx计算电路,ln计算电路等等。当按下一个计算符号按键时,数据进行对应的计算电路进行计算,例如,按下lncosx计算按键时,从键盘输入的数字进入lncosx计算电路进行计算,并输出到数码管显示。开方计算电路通过对应的牛顿迭代法公式对数据进行开方计算,sinx,cosx,tanx,cotx等计算电路通过泰勒展开公式进行计算,lnx,立方n次方计算通过泰勒展开公式进行计算。lncosx通过《古今算学丛书假数测圆》里面的公式进行计算。上面各种计算公式通过数字电路加法器,减法器,乘法器,除法器按公式连接起来进行计算。
([{)]}等按键通过非门,与门判断电路,将使电路先计算其里面的数值,在计算其外面的数值。最后电路通过=按键输出高电平控制输出计算结果到数码管编码器,驱动数码管输出计算结果。电路中的加法器,减法器,乘法器,除法器都采用串行加法器,减法器,除法器,乘法器等。
按键扫描电路
当有按键按下时RS触发器Q输出1,Q输出0,按下清零键以后,RS触发器Q端输出0,Q 端输出0。
当RS触发器的输入端R,S都是1时,触发器保持输出端没有变化。利用这个特点,当按键输入高电平1时,电路输出高电平1给存储器,当按键断开输入低电平0时,RS触发器仍然给存储器输入1,当清零键按下时,RS触发器的S端输入0,触发器给存储器输入0,存储器清零。
计算码生成电路
当数字键1,按下时,这个与门输出0000001给后面计算电路,所有按键存储器后面两两之间接上或门,或门后面再接上或门,最后接上计数器。当按键按下时,计数器变为1,对应的存储器输出对应键值。当按键按下第二次时,计数器输出2,输出两位数字,当按键按下第三次时,计数器输出3,输出三位数字。
当有按键按下时,计数器输出高电平,后级的与门输出键值00000001,第一次按下键值,通过与门输出键值,二进制数字发生器,产生脉冲00001010,相当于十进制数字10,即给键值乘以10倍,因为第二次按下按键时,需要给键值乘以10。脉冲发生器,产生脉冲01100100,相当于十进制数字100,即给键值乘以100倍,因为第三次按下按键时,需要给键值乘以100。脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000倍,因为第四次按下按键时,需要给键值乘以1000。脉冲发生器,产生脉冲1111101000,相当于数字1000,二进制数字发生器,产生脉冲00001010,相当于十进制数字10,即给键值乘以10000倍,因为第五次按下按键时,需要给键值乘以10000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲01100100,相当于十进制数字100,即给键值乘以100000倍,因为第六次按下按键时,需要给键值乘以100000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000000倍,因为第七次按下按键时,需要给键值乘以1000000。二进制数字发生器,产生脉冲00001010,相当于十进制数字10,脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以100000000倍,因为第八次按下按键时,需要给键值乘以100000000。脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,脉冲发生器,产生脉冲1111101000,相当于数字1000,即给键值乘以1000000000倍,因为第九次按下按键时,需要给键值乘以1000000000。
当有符号按键按下时,按键计数器清零,记录按键次数为零,只有当字符按键按下时,异或门输出0,与门输出0,计数器清零。当没有按键按下时,有数字键按下时,异或门输出1,与门输出1。
计算器的总电路图如下:
第一部分 计算整数次方根
下面的电路可参见《数字工程》[美]G.K.科斯托普洛斯著,王玉龙,蔡勇译,张其善校,人民邮电出版社1981年出版。
附录A,计算整数次方根的一般方法的详细推导。
不论是哪一种数制中的数,其n次方根都可以通过每次只计算出一位当根的方法来确定。设R是数K的n次方根,其中n为整数,R可表示为:
R=r r …r r r …r (A*1)
im im-1 i1 f1 f2 fj
式中,R的整数部分分为m位,小数部分分为j位,等式(A1)也可表示为:
m-1
R=(r r …r r r …r )Q (A2)
im im-1 i1 f1 f2 fj
式中,Q是数制的基数,r 为非零数。取R的n次幂,则由式(A2)可得:
im
n n (m-1)n
R =(r r …r r r …r ) *Q (A3)
im im-1 i1 f1 f2 fj
n
用字母h表示R 整数部分的位数,当括号里的数为最小时,k为最小。
这就是r 等于1,其余各r位都等于0时的情况,如下式所示:
im
(r r …r r r …r ) =(1.0…0)=1(1位最小) (A4)
im im-1 i1 f1 f2 fj
因此,k的最小值为式(A3)中基数Q的指数加1,即:
(m-1)n+1≤k (A5)
同样,当式(A3)括号里的数为最大时,k为最大。这就所有r位都等于Q-1时的情况,其中Q-1是Q数制中的最大数值。
n n n
(r r …r r r …r ) =(Q-1.Q-1 Q-1 …Q-1) =(10-0.00…1) (十进制)
im im-1 i1 f1 f2 fj max (A6)
如果括号里的数仅是10,则取幂结果将为n+1位数:
n n n n n
10 =(1.0Q) =(1.0) Q =Q (n+1位整数)
n n
因为括号里的数是10 的最邻近的偏低近似值,而10 是n+1位*整数的最小数,所以n应等于式(A6)中蒸熟的位数。*注:原文为n,疑错改为n+1,译者 .
因此,k的最大值为式(A3)中基数Q的指数(m-1)*n加n,即:
k≤(m-1)n+n 或k≤mn (A7)
由式(A5)和(A7)则得:
(m-1)n+1≤k≤mn (A8)
由式(A8)可知,当m增加1时,k的范围就增加n,也就是说,m的每一个单位对应于k的n个单位。
n
这表明R的每一位整数对应于K的n位数,即K=R 。换句话说,数K的每n位对应其n次方根中的一位,即
n
K =R
设K为一个要算n次方根的数,并没有得之方根为:
R=r r …r r (A9)
m m-1 2 1
也就是说一个数的方根等于这个数的的里面的一段数的方根的和, 为了简化计算方根的一般方法的推导过程,先只考虑方根的整数部分。
n-1 m-1
式(A9)中,r 位的权为Q ,其所表示的一个完整数为r Q ,
m m
m-1
其中Q 表示r 位和小数点之间有m-1个零。
m
根位r 必须是一个使下列差值为最小的正值:
m
m-1 n
K=(r r Q ) (A10)
m m-1
同样,根位r 必须是一个使下列差值为最小的正值:
1
n
K=(r r …Q ) (A11)
m m-1 1
以此类推,根位r 必须是一个使下列差值为最小值的正值:
1
n
K=(r r …r ) (A12)
m m-1 1
式(A11)可写为:
m-1 n m-1 n m-2 n
K-(r Q ) +(r Q ) -(r r Q )
m m m m-1
m-1 n m-2 n m-1 n
=[K-(r Q ) ]-[(r r Q ) -(r Q ) ]
m m m-1 m
m-1 n m-1 m-2 n m-1 n
=[K-(r Q ) ]-[r Q +r Q ) -(r Q ) ]
m m m-1 m
n n
即为:[前面运算之差]-[(部分根+新位) -(部分根) ], 一个数的整数根等于这个数的部分根的和, 其中每一个新位必须使差值进一步减小。若用M表示上述减法中的被减数,用S表示减数,则S表示式为:
m-1 n
S (对 r )=(r Q ) (M =K)
m m m m
m-2 n m-1 n
S (对r )=(r r Q ) -(r Q ) (M =M -S )
m-1 m-1 m m-1 m m-1 m m
n n
S (对r )=(r r …r ) -[(r r …r )Q] (M =M -S )
1 1 m m-1 1 m m-1 2 1 2 2
S和M的一般表示式为:
m-(t+2) n m-(t+1) n
S =[(r r …r r Q ] -[(r r …r )Q ]
m-(t+1) m m-1 m-1 m-(t+1) m m-1 m-i
(M =M -S )
m-(t+1) m-t m-t
计算方根的一般方法的流程图如图A1所示。
图A1计算方根的一般方法的流程图。(注:r是使M-S的差为最小的非负数。)使正被计算的根有效位规格化,S表示式变为:
n n
S =[(r r …r )Q+r ] -[(r r …r )Q]
m-(t+1) m m-1 m-I m-(t+1) m m-1 m-i
设已算得的部分根r r …r =R,并设r为新的根位,则得:
m m-1 m-i
n n
S=[QR+r] -[QR] (A14)
因为每次迭代中只有n个附加数位参加计算,所以上述算法可表示为如图A2所示。
若要计算平方根,则S表示式中的n应分别取2和3,如下所示:
2 2
S(求平方根)=(QR+r) -(QR)
2 2 2
=(QR) +2QRr+r -(QR)
2
=2QRr+r
=(2QR+r)r (A15)
3 3
S(求立方根)=(QR+r) -(QR)
3 2 2 3 3
=(QR) +3(QR) r+3QRr +r -(QR)
3 2 3
=3(QR) r+3QRr +r
3
=3QRr(QR+r)+r
2
=[3QR(QR+r)+r ]r (A16)
若要计算十进制数的方根,则S表示式中的Q应取10.因此,计算十进制数平方根S表示式为:
S=(20R+r)r (A17)
图A3表示了计算十进制数平方根的流程图,若要计算立方根,则S表示式为:
2
S=[30R(10R+r)+r ]r
图A4表示了计算十进制数立方根的流程图。同样,若要计算二进制数的方根,则S表示式中的Q应取2,因此,计算二进制数平方根的S表示式为:
S=(AR+r)r
用A5表示了计算二进制数平方根的流程图。若要计算立方根,则S表示式为:
2
S=[6R(2R+r)+r ]r
图A6表示了计算二进制数立方根的流程图。
例如:计算√1426,
1.先计算√14,得到14的开方是3.74165738677,
2.所以最高位是3,
3.14减去33等于5,把它写在第二段数26的右边得到526,
4.用320得到60,再用60除526,所得的最大整数8,
5.用320得到60,用60加上8等于68,再用688得到544,(203+8)8=544,
6.因为544>526,所以将8变为7,(203+7)7=469,
7.1426开方得到37,√1426=37.762415177
求一个数的立方根的运算方法,叫做开立方。最早在我国的《九章算术》少广篇里有对开立方的记载。
1.将被开立方数的整数部分从个位起向左每三位分为一组。
2.根据最左边一组,求得立方根的最高位数。
3.用第一组减去立方根最高位数的立方,在其右边写上第二组数。
4.用求得的最高位数的平方的300倍试除上述余数,得出试商;并把求得的最高位数的平方的300倍与试商的积、求得的最高位数的30倍与试商的平方的积和试商的立方写在竖式左边,
5.用同样方法继续进行下去。
一、开根号方法
1.数m开n次方,n位一节为一根,前根均作a,a后需求的根均作b;前根a的位数不断增长,后根b永远做一位根视,直至开尽或开至所需要的位数。
2.首位a根用1~9n方块直接确定(随后就无a根系列的事了;或用双根或多位根作a;即将约小于被开数的乘方数的幂底整数值作为a根,再求b=x),b根用“标准固律方程式”或“简易求b方程式”求。
二、快速开根
从个位起向左每隔两位为一节,若带有小数从小数点起向右每隔两位一节,用逗号分开求不大于左边第一节数的完全平方数为商,再从左边第一节数里减去求得的商,在它们的差的右边写上第二节作为第一个余数再把商乘以20,试除第一个余数,所得的最大整数作试商用商乘以20加上试商在乘以试商。如果所得的积小于或等于余数,就把这个试商写在商后面,作为新商;如果所得的积大于余数,就把试商就、逐次减小再试,直到积小于或等于余数为止;用同样的方法,继续求。
求立方根的步骤
1.从个位向左每3位数分一节。最左一节可能是3位、2位也可能是1位数。分出几节说明立方根就有几位数。
2.求出最高(左边第一)节位立方根(整数),余数连接下一节3位数作为下一组的被除数,
3.用求出的立方根的2次方300后试除被除数,能商几就用前面立方根的平方300商+前面立方根-30-商的平方+商的立方。(注:一般实际商会比试商少1,因为在试商的情况下还要+新商的立方),这个商就是所求立方根的第2位数。
4.同上:将第二次的余数连接下一节3位数作为新的被除数。
5.将前面已有两位数组成的立方根的平方300后试除新的被除数,能商几就用前两位立方根的平方300商+前两位立方根-30-商的平方+商的立方。
这个商就是所求立方根的第3位数。
6.反复采用上述计算方法,直到余数是0为止。通过试商,如果发现商大于或商小于就减小或增大数字就行了。
总之求出的立方根必须与题目相符。
例1:求17576的立方根
解:分节:17`576,说明立方根有2位数,17的立方根(整数部分)是2,
222=8,17-8=9,9000+576=9576,
2的平方300=1200,9576/1200最多商7,7-1=6(试商),
223006+23066+666=9576,9576-9576=0,20+6=26,
17576的立方根是26
例2:求13144256的立方根
解:分节:13`144`256
说明立方根有3位数,13的立方根(整数部分)是2,
222=8,13-8=5,5000+144=5144,
2的平方300-1200,5144/1200最多商4,4-1=3(试商),
223003+23033+333=4167,5144-4167=977,977000+256=977256,2323300=158700,
13144256的立方根是236,
使用牛顿迭代法计算立方,开方
设A=X^3,求X,称为开立方。开立方有一个标准的公式:
X(n+1)=Xn+(A/X^2-Xn)/3(n,n+1是下角标)
例如,A=5,k=3,即求5介于1的3次方至2的3次方之间(1的3次方=1,2的3次方=8),
初始值X0可以取1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,都可以。例如我们取X0=1.9按照公式:
第一步:X1=1.9+(5/1.9^2-1.9)/3=1.7,
即5/191.9=1.3850416,1.3850416-1.9=-0.5149584,-0.51495841/3=-0.1716528,1.9+(-0.1716528)=1.7。即取2位数值,即1.7.
第二步:X2=1.7+(5/1.7^2-1.7)/3=1.71,
即5/171.7=1.73010,1.73-1.7=0.03,0.031/3=0.01,1.7+0.01=1.71.取3位数,比前面多取一位数。
第三步:X3=1.71+(5/1.71^2-1.71)/3=1.709,
第四步:X4=1.709+(5/1.709^2-1.709)/3=1.7099,
这种方法可以自动调节,第一步与第三步取值偏大,但是计算出来以后输出值自动转小;
第二步,第四步输入值偏小,输出值自动转大。即5=1.70993。当然初始值X0也可以取1.1,1.2,1.3,…1.8,1.9中的任何一个,都是X1=1.7>.当然,我们在实际中初始值最好采用中间值,即1.5.1.5+(5/1.52-1.5)1/3=1.7。
如果用这个公式开平方,只需将3改成2,2改成1.即
X(n+1)=Xn+(A/X-Xn)/2(n,n+1是下角标)
例如,A=5;5介于2的平方至3的平方之间。我们取初始值2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9都可以,我们最好取中间值2.5.
第一步:2.5+(5/2.5-2.5)/2=2.2;
即5/2.5=2,2-2.5=-0.5,-0.51/2=-0.25,2.5+(-0.25)=2.25,取2位数2.2。
第二步:2.2+(5/2.2-2.2)/2=2.23;
即5/2.2=2.272,2.272-2.2=-0.072,-0.0721/2=-0.036,2.2+0.036=2.23.取3位数。
第三步:2.23+(5/2.23-2.23)/2=2.236。
即5/2.23=2.242,2.242-2.23=0.012,0.012*1/2=0.006,2.23+0.006=2.236,
每一步多取一位数。这个方法又叫反馈开方,即使你输入一个错误的数值,也没有关系,输出值会自动调节,接近准确值。关于这个方法的说明,1982年王晓明利用牛顿二项式推出这个公式,找到江西师范大学,一位教授觉得面熟,当场又推演一遍,与牛顿切线法一样。辽宁鞍山的傅钟鹏在他的《数学雅典娜》一书中介绍,天津新蕾出版社。由于是牛顿的公式,作者王晓明不敢贪天之功。所以傅种鹏老师在文章介绍也明确说明是由牛顿切线法推出。
下面的电路通过上面的公式实现计算开立方的功能
牛顿法:在实数域和复数域上近似求解方程的方法
也就是:△y/△x近似于y,举个例子:利用牛顿进行数字的开方处理, 2 定义需要的方程:y=x , x y △y=a-y y
=2x △x=△y/y`
1 1 1 2 0.5
1.5 2.25 -0.25 3 -0.083
1.4167 2 0 2.8267 0
随着迭代更新x值的次数增多,所得达到的x值也就越接近答案。按照上述的推导过程,我们可以推导出牛顿法的表达式: