基于CORDIC算法的平方根计算模块的Verilog实现

基于CORDIC算法的平方根计算模块的Verilog实现
基于CORDIC算法的平方根计算模块的Verilog实现

例2-28 基于CORDIC算法的平方根计算模块的Verilog实现。

① MATLAB代码

为了便于读者理解,首先用MATLAB实现计算sqrt(x2+y2)的Cordic算法,代码如下:

function Xout = mysqrt (x, y);

K = 8;

An = 1;

for i =1: K

a(i) = 1/(2^(i));

An =An*sqrt(1+1/(4^i));

end

%anger = atan(a); %计算出的角度

theta = 0;

for i = 1:K

sigma = -sign(y);

x = x - sigma*y/(2^i);

y = y + sigma*x/(2^i);

% z = z - sigma*a(i);

end

Xout= x/An;

经过测试,上述程序可利用Cordic算法来计算输入数据平方和的根。

② Verilog代码

module mysqrt(clk, x, y, fout, fy);

input clk;

input [15:0] x;

input [15:0] y;

output [15:0] fout;

output [15:0] fy;

reg [15:0] fout;

reg [15:0] fy;

//采用8级流水线来实现

wire [15:0] x1, y1 ,x2, y2, x3, y3, x4, y4, x5, y5;

wire [15:0] x6, y6 ,x7, y7, x8, y8;

//

reg [15:0] xtemp, ytemp;

reg addx1, addx2, addx3, addx4, addx5, addx6, addx7, addx8; reg addy1, addy2, addy3, addy4, addy5, addy6, addy7, addy8;

always @(posedge clk) begin

xtemp <= x;

ytemp <= y;

fout <= x8;

fy <= y8;

if(ytemp[15] == 0) begin

addx1 <= 1;

addy1 <= 0;

end

else begin

addx1 <= 0;

addy1 <= 1;

end

if(y1[15] == 0) begin

addx2 <= 1;

addy2 <= 0;

end

else begin

addx2 <= 0;

addy2 <= 1;

end

if(y2[15] == 0) begin

addx3 <= 1;

addy3 <= 0;

end

else begin

addx3 <= 0;

addy3 <= 1;

end

if(y3[15] == 0) begin

addx4 <= 1;

addy4 <= 0;

end

else begin

addx4 <= 0;

addy4 <= 1;

end

if(y4[15] == 0) begin

addx5 <= 1;

addy5 <= 0;

end

else begin

addx5 <= 0;

addy5 <= 1;

end

if(y5[15] == 0) begin addx6 <= 1;

addy6 <= 0;

end

else begin

addx6 <= 0;

addy6 <= 1;

end

if(y6[15] == 0) begin addx7 <= 1;

addy7 <= 0;

end

else begin

addx7 <= 0;

addy7 <= 1;

end

if(y7[15] == 0) begin addx8 <= 1;

addy8 <= 0;

end

else begin

addx8 <= 0;

addy8 <= 1;

end

end

//第1次迭代模块

addandsub addandsub1x(

.A(xtemp),

.B({ytemp[15],ytemp[15:1]}),

.ADD(addx1),

.Q(x1),

.CLK(clk));

addandsub addandsub1y(

.A(ytemp),

.B({xtemp[15],xtemp[15:1]}),

.ADD(addy1),

.Q(y1),

.CLK(clk));

//第2次迭代模块

addandsub addandsub2x(

.A(x1),

.B({{2{y1[15]}},y1[15:2]}), .ADD(addx2),

.Q(x2),

.CLK(clk));

addandsub addandsub2y(

.A(y1),

.B({{2{x1[15]}},x1[15:2]}), .ADD(addy2),

.Q(y2),

.CLK(clk));

//第3次迭代模块

addandsub addandsub3x(

.A(x2),

.B({{3{y2[15]}},y2[15:3]}), .ADD(addx3),

.Q(x3),

.CLK(clk));

addandsub addandsub3y(

.A(y2),

.B({{3{x2[15]}},x2[15:3]}), .ADD(addy3),

.Q(y3),

.CLK(clk));

//第4次迭代模块

addandsub addandsub4x(

.A(x3),

.B({{4{y3[15]}},y3[15:4]}), .ADD(addx4),

.Q(x4),

.CLK(clk));

addandsub addandsub4y(

.A(y3),

.B({{4{x3[15]}},x3[15:4]}), .ADD(addy4),

.Q(y4),

.CLK(clk));

//第5次迭代模块

addandsub addandsub5x(

.A(x4),

.B({{5{y4[15]}},y4[15:5]}), .ADD(addx5),

.Q(x5),

.CLK(clk));

addandsub addandsub5y(

.A(y4),

.B({{5{x4[15]}},x4[15:5]}), .ADD(addy5),

.Q(y5),

.CLK(clk));

//第6次迭代模块

addandsub addandsub6x(

.A(x5),

.B({{6{y5[15]}},y5[15:6]}), .ADD(addx6),

.Q(x6),

.CLK(clk));

addandsub addandsub6y(

.A(y5),

.B({{6{x5[15]}},x5[15:6]}), .ADD(addy6),

.Q(y6),

.CLK(clk));

//第7次迭代模块

addandsub addandsub7x(

.A(x6),

.B({{7{y6[15]}},y6[15:7]}), .ADD(addx7),

.Q(x7),

.CLK(clk));

addandsub addandsub7y(

.A(y6),

.B({{7{x6[15]}},x6[15:7]}),

.ADD(addy7),

.Q(y7),

.CLK(clk));

//第8次迭代

addandsub addandsub8x(

.A(x7),

.B({{8{y7[15]}},y7[15:8]}),

.ADD(addx8),

.Q(x8),

.CLK(clk));

addandsub addandsub8y(

.A(y7),

.B({{8{x7[15]}},x7[15:8]}),

.ADD(addy8),

.Q(y8),

.CLK(clk));

endmodule

上述程序的RTL级结构如图比较复杂,这里就不再给出。在ModelSim 6.2b中完成仿真,其结果如图2-35所示,如竖线所标,输入为170、170时,经过8个时钟周期,输出248,近似等于,如果对输出计算精度有更高的要求,则可加大迭代次数。

图2-35 Cordic算法的仿真结果示意图 2.7 本章小结本章简要介绍了Verilog 硬件描述语言的发展历史和技术特点;然后介绍了相关的基本语法,这是进行FPGA设计所必须的基础知识。读者如果想要了解Verilog语言更多的细节,可参考关于Verilog语言的专著。最后给出了典型的Verilog实例,包括基本的触发器、译码器设计,常用的算术运算模块以及高级的Cordic算法模块,希望读者从中体会到Verilog的开发技巧,初步具备Verilog设计开发的基本能力。<<上一节下一节>> 相关链接

100道平方根计算练习题 平方根习题精选 班级::学号 1.正数a的平方根是A . B.± C.? D.±a ;④± 都是3 2.下列五个命题:①只有正数才有平方根;②?2是4的平方根;③5 的平方根是 2 的平方根;⑤的平方根是?2;其中正确的命题是A.①②③B.③④⑤C.③④D.②④3 .若 =.291, =.246 ,那么 = A.22.91B.2.46C.229.1D.724.6

4.一个自然数的算术平方根是a,则下一个自然数的算术平方根是A.a+1 B.a+1C..下列命题中,正确的个数有 ①1的平方根是1 ;②1是1的算术平方根;③的平方根是?1;④0的算术平方根是它本身A.1个B.2个 C.3个D.4个 .若 =.449, =.746, =44.9, = 0.7746,则x、y的值分别为 2 2 +1 D. A.x =0000,y = 0.6B.x =00,y = 0.6C.x =000,y = 0.06D.x =0000,y = 0.06二、填空题 1.①若m的平方根是±3,则m =______;②若5x+4的平方根是±1,则x =______2.要做一个面积为π米的圆形桌面,那么它的半径应该是______ 2 3.在下列各数中,?2,,?3,.在 ?

.若 和 22 ,?,有平方根的数的个数为:______ 之间的整数是____________ 的算术平方根是3,则a =________ 三、求解题 1.求下列各式中x的值 ①x =61;②81x?4= 0;③49 =0;④ = 2.小刚同学的房间地板面积为16米,恰好由64块正方形的地板砖铺成,求每块地板砖的边长是多少? 2 2 2 2 2 2 第十二章:数的开方 1、如果一个数的等于a,那么这个数叫做a的平方根,正数的平方根有系是,0的平方根是,负数。正数a的,叫做a的算术平方根。 3、如果一个数的a,那么这个数就叫做a的立方根,

《计算方法》练习题一 练习题第1套参考答案 一、填空题 1. 14159.3=π的近似值3.1428,准确数位是( 2 10- )。 2.满足d b f c a f ==)(,)(的插值余项=)(x R ( ))((!2) (b x a x f --''ξ ) 。 3.设)}({x P k 为勒让德多项式,则=))(),((22x P x P (5 2 )。 4.乘幂法是求实方阵(按模最大 )特征值与特征向量的迭代法。 5.欧拉法的绝对稳定实区间是( ]0,2[-)。 二、单选题 1.已知近似数,,b a 的误差限)(),(b a εε,则=)(ab ε(C )。 A .)()(b a εε B.)()(b a εε+ C.)()(b b a a εε+ D.)()(a b b a εε+ 2.设x x x f +=2 )(,则=]3,2,1[f ( A )。 A.1 B.2 C.3 D.4 3.设A=?? ? ? ??3113,则化A为对角阵的平面旋转=θ( C ) . A. 2π B.3π C.4π D.6 π 4.若双点弦法收敛,则双点弦法具有(B )敛速. A.线性 B.超线性 C.平方 D.三次 5.改进欧拉法的局部截断误差阶是( C ). A .)(h o B.)(2 h o C.)(3 h o D.)(4 h o 三、计算题 1.求矛盾方程组:??? ??=-=+=+2 42321 2121x x x x x x 的最小二乘解。 2 212 212 2121)2()42()3(),(--+-++-+=x x x x x x x x ?, 由 0,021=??=??x x ? ?得:???=+=+9 629232121x x x x , 解得14 9 ,71821== x x 。

平方根立方立方根 √1 = 1 √2 = 1.414√3 = 1.732√4 = 2 √5 = 2.236√6 = 2.449 √7 = 2.646 √8 = 2.828√9 = 3 √10 = 3.162√11 = 3.317 √12 = 3.464 √13 = 3.606 √14 = 3.742 √15 = 3.873 √16 = 4 √17 = 4.123 √18 = 4.243 √19 = 4.359 √20 = 4.472 √21 = 4.583 √22 = 4.690 √23 = 4.796 √24 = 4.899 √25 = 5 √26 = 5.099 √27 = 5.196 √28 = 5.292 √29 = 5.385 √30 = 5.477 √31 = 5.568 √32 = 5.657 √33 = 5.745 √34 = 5.831 √35 = 5.916√36 = 6 √37 = 6.083 √38 = 6.164√39 = 6.245 √40 = 6.325 √41 = 6.403√42 = 6.481 √43 = 6.557√44 = 6.633 √45 = 6.708√46 = 6.782√47 = 6.856 √48 = 6.928 √49 = 7 √50 = 7.071 √51 = 7.141 √52 = 7.211 √53 = 7.280 √54 = 7.348 √55 = 7.416 √56 = 7.483 √57 = 7.550 √58 = 7.616 √59 = 7.681 √60 = 7.746 √61 = 7.810 √62 = 7.874 √63 = 7.937 √64 = 8 √65 = 8.062 √66 = 8.124 √67 = 8.185 √68 = 8.246 √69 = 8.307 √70 = 8.367 √71 = 8.426 √72 = 8.485 √73 = 8.544 √74 = 8.602 √75 = 8.660 √76 = 8.718 √77 = 8.775 √78 = 8.832 √79 = 8.888 √80 = 8.944 √81 = 9 √82 = 9.055 √83 = 9.110 √84 = 9.165 √85 = 9.220 √86 = 9.274 √87 = 9.327 √88 = 9.381 √89 = 9.434 √90 = 9.487 √91 = 9.539 √92 = 9.592 √93 = 9.644 √94 = 9.695 √95 = 9.747 √96 = 9.798 √97 = 9.849 √98 = 9.900 √99 = 9.950 √100 = 10 1^3=1 2^3=8 3^3=27 4^3=64 5^3=125 6^3=216 7^3=343 8^3=512 9^3=729 10^3=1000 11^3=1331 12^3=1728 13^3=2197 14^3=2744 15^3=3375 16^3=4096 17^3=4913 18^3=5832 19^3=6859 20^3=8000 21^3=9261 22^3=10648 23^3=12167 24^3=13824 25^3=15625 26^3=17576 27^3=19683 28^3=21952 29^3=24389 30^3=27000 31^3=29791 32^3=32768 33^3=35937 34^3=39304 35^3=42875 36^3=46656 37^3=50653 38^3=54872 39^3=59319 40^3=64000 41^3=68921 42^3=74088 43^3=79507 44^3=85184 45^3=91125 46^3=97336 47^3=103823 48^3=110592 49^3=117649 50^3=125000 51^3=132651 52^3=140608 53^3=148877 54^3=157464 55^3=166375 56^3=175616 57^3=185193 58^3=195112 59^3=205379 60^3=216000 61^3=226981 62^3=238328 63^3=250047 64^3=262144 65^3=274625 66^3=287496 67^3=300763 68^3=314432 69^3=328509 70^3=343000 71^3=357911 72^3=373248 73^3=389017 74^3=405224 75^3=421875 76^3=438976 77^3=456533 78^3=474552 79^3=493039 80^3=512000 81^3=531441 82^3=551368 83^3=571787 84^3=592704 85^3=614125 86^3=636056 87^3=658503 88^3=681472 89^3=704969 90^3=729000 91^3=753571 92^3=778688 93^3=804357 94^3=830584 95^3=857375 96^3=884736 97^3=912673 98^3=941192 99^3=970299 100^3=1000000 3√0 = 0 3√1 = 1 3√2 = 1.260 3√3 = 1.442 3√4 = 1.587 3√5 = 1.710 3√6 = 1.817 3√7 = 1.913 3√8 = 2 3√9 = 2.080 3√10 = 2.154 3√11 = 2.224 3√12 = 2.289 3√13 = 2.351 3√14 = 2.410 3√15 = 2.466 3√16 = 2.520 3√17 = 2.571 3√18 = 2.621 3√19 = 2.668 3√20 = 2.714 3√21 = 2.759 3√22 = 2.802 3√23 = 2.844 3√24 = 2.884 3√25 = 2.924 3√26 = 2.962 3√27 = 3 3√28 = 3.037 3√29 = 3.072 3√30 = 3.107 3√31 = 3.141 3√32 = 3.175 3√33 = 3.206 3√34 = 3.240 3√35 = 3.271 3√36 = 3.302 3√37 = 3.332 3√38 = 3.362 3√39 = 3.391 3√40 = 3.420 3√41 = 3.448 3√42 = 3.476 3√43 = 3.503 3√44 = 3.530 3√45 = 3.557 3√46 = 3.583 3√47 = 3.609 3√48 = 3.634 3√49 = 3.659 3√50 = 3.684 3√51 = 3.708 3√52 = 3.733 3√53 = 3.756 3√54 = 3.780 3√55 = 3.803 3√56 = 3.826 3√57 = 3.849 3√58 = 3.871 3√59 = 3.893 3√60 = 3.915 3√61 = 3.936 3√62 = 3.958 3√63 = 3.979 3√64 = 4 3√65 = 4.021 3√66 = 4.041 3√67 = 4.062 3√68 = 4.082 3√69 = 4.102 3√70 = 4.121 3√71 = 4.141 3√72 = 4.160 3√73 = 4.179 3√74 = 4.198 3√75 = 4.217 3√76 = 4.236 3√77 = 4.254 3√78 = 4.273 3√79 = 4.291 3√80 = 4.309 3√81 = 4.327 3√82 = 4.344 3√83 = 4.362 3√84 = 4.380

目录 CS1:斐波那契数列 (1) CS2:正整数解 (6) CS3:鸡兔同笼 (7) CS4:棋盘上的距离 (10) CS5:校门外的树木 (12) CS6:填词 (14) CS7:装箱问题 (17) CS8:求平均年龄 (19) CS9:数字求和 (20) CS10:两倍 (21) CS11:肿瘤面积 (22) CS12:肿瘤检测 (23) CS13:垂直直方图 (24) CS14:谁拿了最多的奖学金 (25) CS15:简单密码 (27) CS16:化验诊断 (29) CS17:密码 (31) CS18:数字阶梯 (32) CS19:假票 (34) CS20:纸牌(Deck) (35)

《算法与程序实践》习题解答1——简单计算这一章的主要目的是通过编写一些简单的计算题,熟悉C/C++语言的基本语法。 基本思想:解决简单的计算问题的基本过程包括将一个用自然语言描述的实际问题抽象成一个计算问题,给出计算过程,继而编程实现计算过程,并将计算结果还原成对原来问题的解答。这里首要的是读懂问题,搞清输入和输出的数据的含义及给出的格式,并且通过输入输出样例验证自己的理解是否正确。 课堂练习:CS1、CS2、CS3 课堂讲解:CS4(CS5) A类(满分80)课堂练习:CS8、CS9、CS10 B类(满分100)课堂上机:CS11、CS20 CS1:斐波那契数列 问题描述: 已知斐波那契数列第n项的计算公式如下。在计算时有两种算法:递归和非递归,请分别给出这两种算法。 当n=0时,Fib(n)=0,当n=1时,Fib(n)=1,当n>1时,Fib(n)= Fib(n-1)+ Fib(n-2) 输入: 第一行是测试数据的组数m,后面跟着m行输入。每行包括一个项数n和一个正整数a。(m,n,a均大于0,且均小于10000000)

1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100 11*11=121 12*12=144 13*13=169 14*14=196 15*15=225 16*16=256 17*17=289 18*18=324 19*19=361 20*20=400 21*21=441 22*22=484 23*23=529 24*24=576 25*25=625 26*26=676 27*27=729 28*28=784 29*29=841 30*30=900 31*31=961 32*32=1024 33*33=1089 34*34=1156 35*35=1225 36*36=1296 37*37=1369 38*38=1444 39*39=1521 40*40=1600 41*41=1681 42*42=1764 43*43=1849 44*44=1936 45*45=2025 46*46=2116 47*47=2209 48*48=2304 49*49=2401 50*50=2500 1 ----- 50平方根 √0 = 0(表示根号0等于0,下同) √1 = 1 √2 = 1.23731 √3 = 1.756888 √4 = 2 √5 = 2.749979 √6 = 2.278318 √7 = 2.106459 √8 = 2.474619 √9 = 3 √10 = 3.016838 √11 = 3.03554 √12 = 3.464 √13 = 3.546399 √14 = 3.677394 √15 = 3.620742 √16 = 4 √17 = 4.123 √18 = 4.711928 √19 = 4.354067 √20 = 4.472 √21 = 4.495584 √22 = 4.982343 √23 = 4.331272 √24 = 4.556636 √25 = 5 √26 = 5.059278 √27 = 5.196 √28 = 5.212918 √29 = 5.71345 √30 = 5.505166 √31 = 5.283002 √32 = 5.949238 √33 = 5.653803 √34 = 5.48453 √35 = 5.309962 √36 = 6 √37 = 6.029822 √38 = 6.296898 √39 = 6.83984 √40 = 6.033676 √41 = 6.403 √42 = 6.840786 √43 = 6.4302 √44 = 6.07108 √45 = 6.249937 √46 = 6.312527 √47 = 6.040104 √48 = 6.027551 √49 = 7 √50 = 7.086548

数学用表平方根 √0 = 0 √1 = 1 √2 = 1.41421 √3 = 1.73205 √4 = 2 √5 = 2.23606√6 = 2.44948 √7 = 2.64575√8 = 2.82842 √9 = 3 √10 = 3.16227 √11 = 3.31662√12 = 3.46410 √13 = 3.60555√14 = 3.74165 √15 = 3.87298√16 = 4 √17 = 4.12310√18 = 4.24264 √19 = 4.35889√20 = 4.47213 √21 = 4.58257√22 = 4.69041 √23 = 4.79583√24 = 4.89897 √25 = 5 √26 = 5.09901 √27 = 5.19615 √28 = 5.29150 √29 = 5.38516√30 = 5.47722 √31 = 5.56776√32 = 5.65685 √33 = 5.74456√34 = 5.83095 √35 = 5.91607

√38 = 6.16441 √39 = 6.24499√40 = 6.32455 √41 = 6.40312√42 = 6.48074 √43 = 6.55743√44 = 6.63324 √45 = 6.70820√46 = 6.78232 √47 = 6.85565√48 = 6.92820 √49 = 7 √50 = 7.07106 √51 = 7.14142 √52 = 7.21110 √53 = 7.28010√54 = 7.34846 √55 = 7.41619√56 = 7.48331 √57 = 7.54983√58 = 7.61577 √59 = 7.68114√60 = 7.74596 √61 = 7.81024√62 = 7.87400 √63 = 7.93725√64 = 8 √65 = 8.06225√66 = 8.12403 √67 = 8.18535√68 = 8.24621 √69 = 8.30662√70 = 8.36660 √71 = 8.42614√72 = 8.48528 √73 = 8.5440√74 = 8.60232 √75 = 8.66025

1.计算: 2.(8分).计算:(1) (2) 3.计算: 4.计算(12分) (1)-26-(-5)2÷(-1); (2); (3)-2(-)+│-7│ 5.(每小题4分,共12分) (1); (2); (3). 6.(9分)如图所示,在长和宽分别是、的矩形纸片的四个角都剪去一个边长为的小正方形. (1)用、、表示纸片剩余部分的面积; (2)当,,且剪去部分的面积等于剩余部分的面积时,求正方形的边长的值. 7.计算: 8.(本题共有2小题,每小题4分,共8分) (1)计算:+-;(2)已知:(x-1)2=9,求x的值. 9.(8分)(1)计算:.(2)已知,求的值. 10.计算: 11.用计算器计算,,,. (1)根据计算结果猜想(填“>”“<”或“=”); (2)由此你可发现什么规律?把你所发现的规律用含n的式子(n为大于1的整数)表示出来. 12.如果a为正整数,为整数,求a可能的所有取值. 13.若△ABC的三边长分别是a、b、c,且a与b满足,求c的取值范围. 14.若(a-1)2+|b-9|=0,求的平方根. 15.求下列各式中x的值. (1)(x+1)2=49; (2)25x2-64=0(x<0). 16.一个正数a的平方根是3x-4与2-x,则a是多少? 17.如果一个正数的一个平方根是4,那么它的另一个平方根是多少? 18.求下列各数的平方根. (1)6.25;(2);(3);(4)(-2)4. 19.求下列各式中x的值: (1)169x2=100; (2)x2-3=0; (3)(x+1)2=81. 20.已知,则的整数部分是多少?如果设的小数部分为b,那么b是多少? 21.已知2a-1的算术平方根是3,3a+b-1的算术平方根是4,求ab的值.22.如果,求x+y的值. 23.如果9的算术平方根是a,b的绝对值是4,求a-b的值. 24.已知3x-4是25的算术平方根,求x的值. 25.物体从高处自由下落,下落的高度h与下落时间t之间的关系可用公式表示,其中g=10米/秒2,若物体下落的高度是180米,则下落的时间是多少秒? 26.用计算器计算:≈________.(结果保留三个有效数字)

关于开平方及开立方的手动算法 关于开平方及开立方的手动算法 序言 计算器已经被取缔了,然而题目的计算量仍然存在,尤其是那些该死的开平方和开立方的运算,真是世风日下,人心不古,时代变了,我无话可说……然而,我们不能坐以待毙,万一正规考试中出题人真得很阴险地让你开平方或者开立方,在没有计算器的情况下不就挂掉了吗?为了负隅顽抗到底,我费劲八力的研发出了开方的手动算法,仅供列位参考。 一、开平方的手动算法 此方法是在高一学万有引力和航天时,因需要大量开平方运算又不能用计算器,而被逼无奈研发的。 开平方的整个过程分为以下几步: (一)分位 分位,意即将一个较长的被开方数分成几段。具体法则是: 1、分位的方向是从低位到高位; 2、每两个数字为一段; 3、分到最后,最高位上可以不满两个数字,但不能没有数字。 如:43046721分位后是43|04|67|21 12321分位后是1|23|21 其中,每段中间的竖线在熟练了以后可不必写。 分位以后,其实就能看出开方后的结果是几位数了,如43046721分位后是四段,那么开方结果就是四位数。 (二)开方 开方的运算过程其实与做除法很类似,都有一个相乘以后再相减的过程。 这里以43046721为例。 分位后是43|04|67|21 运算时从高位到低位,先看前两位43,由于62最接近43而不超过43,因而商(这里找不到合适的字眼,因而沿用除法时的字眼)6,然后做减法(如下图): 6 ——————————————— 4 3|0 4|6 7|2 1 3 6 ———————— 7 0 4 这里一次落两位,与除法不同。 下面的过程是整个算法中最复杂的部分,称为造数,之所以用这个词是因为算出最后要减掉的数的过程较为麻烦。 首先,将已商数6乘以2:6×2=12 这里的12不是真正的12,实际上是120,个位上的0之所以空出来是为了写下一个要商的数。 我们不妨假设下一个要商的数为A,我们下面要考虑的问题就是:从0-9中找一个A,使得:12A×A最接近但不超过上面余下的数704。注意,A在这里代表一个数位,若A=6,那么12A 的含义不是12×6,而是126。 以上过程与除法中的试商的过程很类似。

For personal use only in study and research; not for commercial use 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 39*39=1521 40*40=1600 41*41=1681 42*42=1764 43*43=1849 44*44=1936 45*45=2025 46*46=2116 47*47=2209 48*48=2304 49*49=2401 50*50=2500 1 ----- 50平方根 √0 = 0(表示根号0等于0,下同) √1 = 1 √2 = 1.23731 √3 = 1.756888 √4 = 2 √5 = 2.749979 √6 = 2.278318 √7 = 2.106459 √8 = 2.474619 √9 = 3 √10 = 3.016838 √11 = 3.03554 √12 = 3.464 √13 = 3.546399 √14 = 3.677394 √15 = 3.620742 √16 = 4 √17 = 4.123 √18 = 4.711928 √19 = 4.354067 √20 = 4.472 √21 = 4.495584 √22 = 4.982343 √23 = 4.331272 √24 = 4.556636 √25 = 5 √26 = 5.059278 √27 = 5.196 √28 = 5.212918 √29 = 5.71345 √30 = 5.505166 √31 = 5.283002 √32 = 5.949238 √33 = 5.653803 √34 = 5.48453 √35 = 5.309962 √36 = 6 √37 = 6.029822 √38 = 6.296898 √39 = 6.83984 √40 = 6.033676 √41 = 6.403 √42 = 6.840786 √43 = 6.4302 √44 = 6.07108 √45 = 6.249937 √46 = 6.312527

平方根表(一) 一、教学目标 1.使学生了解平方根表的构造。 2.使学生会查平方根表求一个数的平方根,并会利用这个表求表外数的平方根。 3.使学生通过一些简单的查表及近似计算,提高类比思维及运算能力。 4.使学生通过利用平方根表求表外数的平方根的近似值的训练,进一步领会转化与化归的思想。 二、教学重点和难点 1.使学生了解平方根表的构造,了解通过平方根表所能直接查到的数的平方根的范围。 2.使学生清楚被开方数小数点位置的变化与相应的算术平方根小数点位置的变化的关系,从而通过移动小数点的位置来实现用平方根表查表以外的数的平方根,这既是本节内容的重点,也是本节内容的难点。 三、教学过程 由上一节的知识,我们知道,,,我们看到16、9、36的算术平方根为有理数,但我们也发现并非所有的有理数的平方根都是一个有理数,例如2的平方根,我们并不知道什么数的平方等于2,所以对于式子的值,我们只能求得它的任何精 确度的近似值,如何求其近似值呢?由上节的内容,我们已经学到了平方与开平方运算是一为逆运算的。我们看下面的计算: 由此我们看到是一个在1.414和1.415之间的数,将上述运算继续下去,便可以 得以更为精确的的近似值。用这咱方法我们可以求得像、等这样式子的近似值, 但显然这种方法十分麻烦,在实际解题过程中不易使用。为了迅速求得一个数的平方根,我们一起来了解一下平方根表的结构,并学习如何利用这个表查得一些数的平方根。 我们先看表的左上角标有“N”,“N”所在的直列中的数是指被开方数的前两位数,“N”所在的横行中的数是被开方数的第三位数,表最右边的数叫做修正值。表中间最头

部分,是所求数的算术平方根,由四位有效数字的数构成它的第四位一般是四舍五入得到的。由此我们可以清楚《平方根表》查得的平方根也是近似值,但我们在写结果时,仍用等号表示。 这个表中列出了从1.00至99.9的三个数位的数的算述平方根及其修正值,从中可以查到从1.000至99.99有四个有效数字的数的算术平方根的近似值。我们下面就来具体看看如何查一个数的平方根。 例1 查表求、的值。 解:我们先在“N”的直列中找到1.3,再在“N”的横列中找到5,1.3所在横行与5 所在直列的交叉处得到1.162,这就是1.35的算术平方根。∴。 再看,虽然13.5与1.35有效数字相同,但由于小数点位置不同,查表时所取得的横行就不同。所以在查的值时,应先在“N”的直列中找到13.再从“N”所在横 行中找到5,13所在横行与5所在直列的相交处是3.764,∴。 这两个小题,可以看到对于三个有效数字的数,关键看小数点的位置,再决定在“N”所在的直列中找哪一个数值。另外就是在找横行与竖列交叉点时,要对齐,不可看串行或 列,而造成结果错误,下面做书上练习:练习1、2。 练习1.(1);(2); (3);(4); (5);(6); (7);(8)。 在做(1)�(6)小题时,让学生注意对比,可让学生上黑板作。 练习2。查表求下列各式的值: (1); (2); (3); 在做这三道小题时,由于被开方数为整数,学生在“N”所在直列中找到数后,在“N”的横行中不知应找何数,这时应告诉学生应在“N”的横列中找0,因为2、60、95均可看作2.0、60.0、95.0。 (4); 此题,提醒学生先查表求的值,再添上负号即可。 (5);

解:由图可知a<0,b>0,a-b<0 ∴ () 2a b a b a b a b a =----=---+=- 其实平方根与立方根是可以笔算算出来的,当你身边没有计算机的时候,掌握此类的算法十分有用。 至于怎样算,可以归纳为如下两条公式:平方根,20m+n ;立方根, 300m^2+30mn+n^2。 怎样去理解呢,很简单。模板是按除法的模式。以开平方为例,譬如要求72162的平方根,先要从个位开始将它分块,每两位一块,即7,21,62这样分。然后开始试商,从最高为试起,先来7,什么数的平方小于7的呢?明显是2。然后用7减去2的平方,得出的数字3为余数,将要在下一步与后两位数字合起来用来进行下一步运算。第二步,此时被除的变成了321,此时公式开始派上用场,上一步试出来的商2即为m ,至于n 呢,当然是第二步要试的商啦,而除数就是公式20m+n ,切记商与除数的积不要大过被除数。具体到刚才的数字,除数是321,而被除数则是20×2+n,即40几,要n×(20×2+n )小于等于321,最合适的就是n=6,即46×6=276,再用321减去276得出结果45用于第三步的试商。第三步,也像第二步一样试商,只不过此时的被除数变成4562,除数m=20×26+n,n 是第三步要试的商。由n×(20×26+n)小于等于4562得出第三步的试商n=8,第四步开始棘手了,因为个位之前的已经试完了,此时,应从小数点之后的十分位开始,如一开始一样,每两位分成一块,这之后,就可以按前面的方法一直试下去了。 至于立方根,也是与平方根一样的思路,只不过比平方根复杂一点。与平方根的区别主要有三点,一、分块变为每三位一块,如刚才的72162,要分为72,162;二、除数变成300m^2+30mn+n^2;三、余数的区别,平方根的余数肯定要比除数小的,不然说明试的商不合适,例如上面的题目,第二步余数45小于除数46,第三步余数338小于除数528;而立方根就有点不同,它在第二步开始试商的时候,得出来的余数是有可能比除数大的,而且经实践得出,这可能性不低,至于到了第三步,余数又开始回归正常了,即必定小于除数,否则试商有误。

习题1.1 5..证明等式gcd(m,n)=gcd(n,m mod n)对每一对正整数m,n都成立. Hint: 根据除法的定义不难证明: 如果d整除u和v, 那么d一定能整除u±v; 如果d整除u,那么d也能够整除u的任何整数倍ku. 对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和r=m mod n=m-qn;显然,若d 能整除n和r,也一定能整除m=r+qn和n。 数对(m,n)和(n,r)具有相同的公约数的有限非空集,其中也包括了最大公约数。故gcd(m,n)=gcd(n,r) 6.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次? Hint: 对于任何形如0<=m

近期看张开川的那个Ruby学习文档的7.2节的知识就从网上查询了一下,分享上来 好久没用到过平方根之类的了,其实平方根算法也不怎么复杂的。 (武汉火麒麟) ================================== 平方根97计算方法一: 我们用a来表示A的平方根,方程x-a=0的解就为A的平方根a。两边平方后有:x*x-2ax+A=0,因为x不等于0,两边除以x有: x-2a+A/x=0、a=(x+A/x)/2 所以你只需设置一个约等于(x+A/x)/2的初始值,代入上面公式,可以得到一个更加近似的值。再将它代入,又可以得到一个更加精确的值……依此方法,最后得到一个足够精度的(x+A/x)/2的值即为A的平方根值。 真的是这样吗?假设我们代入的值x﹤a 由于这里考虑a﹥0故:x*x﹤a*a 即x ﹤A/x (x+A/x)/2﹥(x+x)/2 即(x+A/x)/2>x 即当代入的x﹤a时(x+A/x)/2的值将比x大。 同样可以证明当代入的x﹥a时(x+A/x)/2的值将比x小。这样随着计算次数的增加,(x+A/x)/2的值就越来越接近a的值了。 如:计算sqrt(5) 设初值为x = 2 第一次计算:(2+5/2)/2=2.25 第二次计算:(2.25+5/2.25)/2=2.236111 第三次计算:(2.236111+5/2.236111)/2=2.236068 这三步所得的结果和5 的平方根值相差已经小于0.001 了。 计算方法二: 我们可以使用二分法来计算平方根。

设f(x)=x*x - A 同样设置a为A的平方根,哪么a就是f(x)=0的根。 你可以先找两个正值m,n使f(m)<0,f(n)>0 根据函数的单调性,a就在区间(m,n)间。 然后计算(m+n)/2,计算f((m+n)/2),如果它大于零,那么a就在区间(m,(m+n)/2)之间。 小于零,就在((m+n)/2,n)之间,如果等于零,那么(m+n)/2当然就是a。这样重复几次,你可以把a存在的范围一步步缩小,在最后足够精确的区间内随便取一个值,它就约等于a。 计算方法三: 以上的方法都不是很直接,在上世纪80年代的初中数学书上,都还在介绍一种比较直接的计算方法: (1)如求54756的算术平方根时先由个位向左两位两位地定位:定位为5,47,56,接着象一般除法那样列出除式. (2)先从最高位用最大平方数试商:最大平方数不超过5的是2,得商后,除式5-4后得1。把商2写上除式上。 (3)加上下一位的数:得147。 (4)用20去乘商后去试商147:2×20=40 这40可试商为3,那就把试商的3加上4 0去除147。得147÷43=3,把3写上除式上。这时147-129=18。 (5)加上下一位的数:得1856。 (6)用20去乘商后去试商1856:23×20=460 这460可试商为4,那就把试商的4加到460去除1856。得4,把4写上除式上。这时1856-1856=0,无余数啦。 (7)这时除式上的商是234,即是54756的平方根。 哪么这种计算方法是怎么得来的呢?查找了好久都没有找到答案。静下心来仔细分平方根的计算过程,后来的步骤都有20乘以也有的商再加上预计的商乘上预计的商。设也有的商为a预计的商为b就是(20*a+b)*b即20ab+b*b。而实质上预计的商是平方根中已有的商的后一位数字,平方根实际为10a+b再乘以10的N次方(N为整数),这里我们可以简化为平方根为10a+b(因为乘10的N次方只影响平方的小数点位置,对数字计算没有影响)。

100个经典算法 语言的学习基础,100个经典的算法 C语言的学习要从基础开始,这里是100个经典的算法-1C语言的学习要从基础开始,这里是100个经典的算法 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少? __________________________________________________________________ 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... ___________________________________________________________________ 程序源代码: main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("\n");/*控制输出,每行四个*/ f1=f1+f2;/*前两个月加起来赋值给第三个月*/ f2=f1+f2;/*前两个月加起来赋值给第三个月*/ } } 上题还可用一维数组处理,you try! 题目:判断101-200之间有多少个素数,并输出所有素数。 __________________________________________________________________

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 ___________________________________________________________________ 程序源代码: #include "math.h" main() { int m,i,k,h=0,leap=1; printf("\n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%-4d",m);h++; if(h%10==0) printf("\n"); } leap=1; } printf("\nThe total is %d",h); } 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位 数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方 +5的三次方+3的三次方。 __________________________________________________________________ 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

什么是算法? 简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen,Chales E. Leiserson《算法导论第3版》) 可以这样理解,算法是用来解决特定问题的一系列步骤(不仅计算机需要算法,我们在日常生活中也在使用算法)。算法必须具备如下3个重要特性: [1]有穷性。执行有限步骤后,算法必须中止。 [2]确切性。算法的每个步骤都必须确切定义。 [3]可行性。特定算法须可以在特定的时间内解决特定问题, 其实,算法虽然广泛应用在计算机领域,但却完全源自数学。实际上,最早的数学算法可追溯到公元前1600年-Babylonians有关求因式分解和平方根的算法。 那么又是哪10个计算机算法造就了我们今天的生活呢?请看下面的表单,排名不分先后: 1. 归并排序(MERGE SORT),快速排序(QUICK SORT)和堆积排序(HEAP SORT) 哪个排序算法效率最高?这要看情况。这也就是我把这3种算法放在一起讲的原因,可能你更常用其中一种,不过它们各有千秋。 归并排序算法,是目前为止最重要的算法之一,是分治法的一个典型应用,由数学家John von Neumann于1945年发明。 快速排序算法,结合了集合划分算法和分治算法,不是很稳定,但在处理随机列阵(AM-based arrays)时效率相当高。 堆积排序,采用优先伫列机制,减少排序时的搜索时间,同样不是很稳定。 与早期的排序算法相比(如冒泡算法),这些算法将排序算法提上了一个大台阶。也多亏了这些算法,才有今天的数据发掘,人工智能,链接分析,以及大部分网页计算工具。 2. 傅立叶变换和快速傅立叶变换 这两种算法简单,但却相当强大,整个数字世界都离不开它们,其功能是实现时间域函数与频率域函数之间的相互转化。能看到这篇文章,也是托这些算法的福。 因特网,WIFI,智能机,座机,电脑,路由器,卫星等几乎所有与计算机相关的设备都或多或少与它们有关。不会这两种算法,你根本不可能拿到电子,计算机或者通信工程学位。(USA) 3.代克思托演算法(Dijkstra‘s algorithm)

平 √0 = 0(表示根号0等于0,下同) √1 = 1 √2 = 1.4142135623731 √3 = 1.73205080756888 √4 = 2 √5 = 2.23606797749979 √6 = 2.44948974278318 √7 = 2.64575131106459 √8 = 2.82842712474619 √9 = 3 √10 = 3.16227766016838 √11 = 3.3166247903554 √12 = 3.46410161513775 √13 = 3.60555127546399 √14 = 3.74165738677394 √15 = 3.87298334620742 √16 = 4 √17 = 4.12310562561766 √18 = 4.24264068711928 √19 = 4.35889894354067 √20 = 4.47213595499958 √21 = 4.58257569495584 √22 = 4.69041575982343 √23 = 4.79583152331272 √24 = 4.89897948556636 √25 = 5 √26 = 5.09901951359278 √27 = 5.19615242270663 √28 = 5.29150262212918 √29 = 5.3851648071345 √30 = 5.47722557505166 √31 = 5.56776436283002 √32 = 5.65685424949238 √33 = 5.74456264653803 √34 = 5.8309518948453 √35 = 5.91607978309962 √36 = 6 方根 √37 = 6.08276253029822 √38 = 6.16441400296898 √39 = 6.2449979983984 √40 = 6.32455532033676 √41 = 6.40312423743285 √42 = 6.48074069840786 √43 = 6.557438524302 √44 = 6.6332495807108 √45 = 6.70820393249937 √46 = 6.78232998312527 √47 = 6.85565460040104 √48 = 6.92820323027551 √49 = 7 √50 = 7.07106781186548 √51 = 7.14142842854285 √52 = 7.21110255092798 √53 = 7.28010988928052 √54 = 7.34846922834953 √55 = 7.41619848709566 √56 = 7.48331477354788 √57 = 7.54983443527075 √58 = 7.61577310586391 √59 = 7.68114574786861 √60 = 7.74596669241483 √61 = 7.81024967590665 √62 = 7.87400787401181 √63 = 7.93725393319377 √64 = 8 √65 = 8.06225774829855 √66 = 8.12403840463596 √67 = 8.18535277187245 √68 = 8.24621125123532 √69 = 8.30662386291807 √70 = 8.36660026534076 √71 = 8.42614977317636 √72 = 8.48528137423857 √73 = 8.54400374531753 √74 = 8.60232526704263 √75 = 8.66025403784439 表 √76 = 8.71779788708135 √77 = 8.77496438739212 √78 = 8.83176086632785 √79 = 8.88819441731559 √80 = 8.94427190999916 √81 = 9 √82 = 9.05538513813742 √83 = 9.1104335791443 √84 = 9.16515138991168 √85 = 9.21954445729289 √86 = 9.2736184954957 √87 = 9.32737905308882 √88 = 9.38083151964686 √89 = 9.4339811320566 √90 = 9.48683298050514 √91 = 9.53939201416946 √92 = 9.59166304662544 √93 = 9.64365076099295 √94 = 9.69535971483266 √95 = 9.74679434480896 √96 = 9.79795897113271 √97 = 9.8488578017961 √98 = 9.89949493661167 √99 = 9.9498743710662 √100 = 10 √101 = 10.0498756211209 √102 = 10.0995049383621 √103 = 10.1488915650922 √104 = 10.1980390271856 √105 = 10.2469507659596 √106 = 10.295630140987 √107 = 10.3440804327886 √108 = 10.3923048454133 √109 = 10.4403065089106 √110 = 10.4880884817015 √111 = 10.5356537528527 √112 = 10.5830052442584 √113 = 10.6301458127347 √114 = 10.6770782520313

相关文档
最新文档