文档库 最新最全的文档下载
当前位置:文档库 › 大整数的乘法实验报告

大整数的乘法实验报告

大整数的乘法实验报告
大整数的乘法实验报告

算法设计与分析实验报告

姓名:XXX

班级:XXX

学号:XXX

一、实验名称:大整数的乘法

时间:2012年3月7日,星期三,第四节

地点:12#311

二、实验目的及要求

实现大整数相乘,需要处理很大的整数,它无法在计算机硬件能直接表示的整数范围内进行处理。若用浮点数来表示它,则只能近似的表示它的大小,计算结果中的有效数字也受到限制。如要精确地表示大整数并在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的算术运算。

三、实验环境

Vc++。

四、实验内容

从键盘上输入两个大整数,实现两个大整数相乘,并输出结果。

例如:在键盘上输入两个数a,b。

a=9876543210;

b=369852147;

五、算法描述及实验步骤

定义三个数组a[100],b[100],c[199]。

用数组a来存放大整数a,a[0]=9,a[1]=8,a[2]=7,a[3]=6,a[4]=5,a[5]=4,a[6]=3, a[7]=2,a[8]=1,a[9]=0;

用数组b来存放大整数b,b[0]=3,b[1]=6,b[2]=9,b[3]=8,b[4]=5,b[5]=2,b[6]=1 b[7]=4,b[8]=7。

用数组c来存放数组a和b每一位的乘积,

c[0]=a[0]*b[0];

c[1]=a[1]*b[0]+a[0]*b[1];

c[2]=a[2]*b[0]+a[1]*b[1]+a[0]*b[2];

……

……

c[17]=a[9]*b[8];

六、调试过程及实验结果

void make(int a[],int aa,int b[],int bb,int c[]){

int i,j;

for(i=0;i

if(a[i]==0) continue;

for(j=0;j

c[i+j]+=a[i]*b[j];

}

for(i=0;i

c[i-1]+=c[i]/10;

c[i]=c[i]%10;

}

printf("\nc=");

for(i=0;i

printf("%d",c[i]);

}

程序运行结果:

更改程序后:

void make(int a[],int aa,int b[],int bb,int c[]){

int i,j;

for(i=0;i

if(a[i]==0) continue;

for(j=0;j

c[i+j]+=a[i]*b[j];

}

for(i=aa+bb-2;i>0;i--){

c[i-1]+=c[i]/10;

c[i]=c[i]%10;

}

printf("\nc=");

for(i=0;i

printf("%d",c[i]);

}

运行结果:

七、总结

本程序的的时间复杂度太大O(aa*bb),但是解决了大整数相乘硬件无法完

成的问题。

上机经验和体会:因注意循环体部分和循环条件,此处时容易出错的地方。

八、附录(源程序清单)

#include

#define A 100

#define B 100

int getnumber(char a[],int b[]){

int i=0;

while(a[i]!='\0'){

b[i]=a[i]-48;

i++;

}

return i;

}

void make(int a[],int aa,int b[],int bb,int c[]){

int i,j;

for(i=0;i

if(a[i]==0) continue;

for(j=0;j

c[i+j]+=a[i]*b[j];

}

for(i=aa+bb-2;i>0;i--){

c[i-1]+=c[i]/10;

c[i]=c[i]%10;

}

printf("\nc=");

for(i=0;i

printf("%d",c[i]);

}

main(){

int aa,bb,i,a[A]={0},b[B]={0},c[A+B]={0};

char a1[A],b1[B];

printf("请输入一个数a:");

gets(a1);

aa=getnumber(a1,a);

printf("a=");

for(i=0;i

printf("%d",a[i]);

printf("\n请输入另一个数b:");

gets(b1);

bb=getnumber(b1,b); printf("b=");

for(i=0;i

printf("%d",b[i]); make(a,aa,b,bb,c); printf("\n");

}

计组-4位乘法器实验报告

实验4位乘法器实验报告 姓名:X XX 学号:X XX 专业:计算机科学与技术课程名称:计算机组成同组学生姓名:无 实验时间:实验地点:指导老师:XXX 一、实验目的和要求 1.熟练掌握乘法器的工作原理和逻辑功能 二、实验内容和原理 实验内容: 根据课本上例3-7的原理,来实现4位移位乘法器的设计。 具体要求:1. 乘数和被乘数都是4位 2. 生成的乘积是8位的 3. 计算中涉及的所有数都是无符号数 4.需要设计重置功能 5.需要分步计算出结果(4位乘数的运算,需要四步算出结果) 实验原理: 1.乘法器原理图

2.本实验的要求: 1.需要设计按钮和相应开关,来增加乘数和被乘数 2.每按一下M13,给一个时钟,数码管的左边两位显示每一步的乘 积 3.4步计算出最终结果后,LED灯亮,按RESET重新开始计算 三、主要仪器设备 1.Spartan-III开发板1套 2.装有ISE的PC机1台 四、操作方法与实验步骤 实验步骤: 1.创建新的工程和新的源文件 2.编写verilog代码(top模块、display模块、乘法运算模块、去抖动模块以及 UCF引脚) 3.进行编译 4.进行Debug 工作,通过编译。

5.. 生成FPGA代码,下载到实验板上并调试,看是否与实现了预期功能 操作方法: TOP: module alu_top(clk, switch, o_seg, o_sel); input wire clk; input wire[4:0] switch; output wire [7:0] o_seg; // 只需七段显示数字,不用小数点 output wire [3:0] o_sel; // 4个数码管的位选 wire[15:0] disp_num; reg [15:0] i_r, i_s; wire [15:0] disp_code; wire o_zf; //zero detector initial begin i_r <= 16'h1122; //0x1122 i_s <= 16'h3344; //0x3344 end alu M1(i_r, i_s, switch[4:2], o_zf, disp_code); display M3(clk, disp_num, o_seg, o_sel); assign disp_num = switch[0]?disp_code:(switch[1] ? i_s : i_r); endmodule

C语言两个大整数相乘

两个极大整数相乘 主要的思路是将数字当作字符串逆序读入字符串a, b中,数据结构如表中所示: 下面是源码: /*“两个极大整数相乘.cpp”*/ /*本方法采用数组逆序存储大整数,首位存数字长度,更方便操作,希望能给予大家一些启发*/ #include #include #define MAX 4096 //理论最大可计算位数: min(m,n)=26512143 void myread(int*a); //读函数,将数字逆序读取,并存在数组中 void myprint(int *a); //用于打印最后结果(包含正序和去除首位的0) double plus(); //用于两个长整数的加法 void add(); //考虑进位问题,将数组每一单元的数转化为个位数 int a[MAX],b[MAX],t[MAX]; int main() { printf("大整数之间的乘法运算。\n"); printf("请输入第一个整数:\n"); myread(a); printf("请输入第二个整数:\n"); myread(b); // printf("中间数最大数为:%.0lf\n",plus()); //测试最大中间值 // for(int i=1;i<=t[0];i++) // printf("t[%d]=%d\n",i,t[i]); //测试每一个数层的数 add(); printf("结果是:"); myprint(t); return 0; } void myread(int *a) { char s[MAX]; scanf("%s",s); a[0]=strlen(s); for(int i=a[0];i>=1;i--) a[i]=s[a[0]-i]-'0'; }

8位乘法器实验报告

6.2 8位乘法器的设计 1.实验目的 (1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。 (2)熟悉GW48-CK EDA实验开发系统的基本使用方法。 (3)学习VHDL基本逻辑电路的综合设计。 2.实验内容 设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。 3.实验条件 (1)开发设备:Lattice ispEXPERT。 (2)实验设备:GW48-CK EDA实验开发系统。 (3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。 4.实验设计 1)系统的原理框图

2)VHDL源程序 (1)选通与门模块的源程序ANDARITH.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS PORT(ABIN: IN STD_LOGIC; DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC_vector(7 DOWNTO 0)); END ENTITY ANDARITH; ARCHITECTURE ART OF ANDARITH IS BEGIN PROCESS(ABIN,DIN)IS BEGIN FOR I IN 0 TO 7 LOOP DOUT(I)<=DIN(I)AND ABIN; END LOOP; END PROCESS; END ARCHITECTURE ART; (2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;

java99乘法表实验报告

实验名称:程序调试 一、实验目的 本实验的目的是让学生掌握开发java程序的三个步骤:编写源文件、编译源文件和运行应用程序。 二、实验环境(软件、硬件环境) 一个java应用程序是由若干个类组成的,其中最多能有一个public类。有且只能有一个类含有main方法。Java源程序的扩展名为java。Java源程序的名字必须和public类的类名相同,如果没有public类,只要和其中任一类的类名相同就行。编译java源程序会产生字节码(.class )文件,源程序有几个类就会产生几个class文件。运行时,只运行含有main 方法的class文件。 例如,有一个java源程序有三个类A,B,C,其中A是public类,B含有main方法。那么这个源程序的名字必须是A.java,编译此程序会产生三个字节码文件A.class,B.class,C.class.运行B.class。 三、实验原理 利用java调试程序 四、实验内容及步骤 1. 在控制台中输出九九乘法表 本练习可以使用户了解for语句实现循环功能。 具体步骤和要求如下: 1)打开一个文本编辑器,(如UtraEdit文本编辑器。)建立一个新文件MultiplyList1.java,将该程序保存到D:\myjava中。 2)将程序清单1-1中的程序代码输入到该文件中并保存。 程序清单1-1: //MultiplyList1.java public class MultiplyList1 { public static void main(String[] args) {

String output=""; for(程序段1){ //设置九九乘法表的行row for(程序段2) //设置九九乘法表的列col output+=col+"*"+row+"="+(row*col)+" "; //记录九九乘法表的内容 output+="\n"; } System.out.println(output); //输出九九乘法表 System.exit(0); } } 3)运行结果如下图1-1所示。请将程序清单1-1中的程序段1和程序段2补充完整。 图1-1 运行结果,输出九九乘法表 4)打开命令行窗口。具体方法:开始—所有程序--附件—命令提示符 5)编译源程序。D:\myjava> javac MultiplyList1.java 6)运行程序。D:\myjava> java MultiplyList1 2.用Applet小程序实现九九乘法表。 要求:编写一个Applet小程序MultiplyList.java,将生成的类MultiplyList.class,嵌套在一个HTML如MultiplyList.html中,运行结果如图1-1所示。

计组-加法器实验报告

半加器、全加器、串行进位加法器以及超前进位加法器 一、实验原理 1.一位半加器 A和B异或产生和Sum,与产生进位C 2.一位全加器 将一位半加器集成封装为halfadder元件,使用两个半加器构成一位的全加器 3.4位串行进位加法器 将一位全加器集成封装为Fulladder元件,使用四个构成串行进位加法器

4.超前进位加法器(4位) ⑴AddBlock 产生并行进位链中的ti(即Cthis)和di(即Cpass),以及本位结果Sum ⑵进位链(Cmaker) 四位一组并行进位链,假设与或非门的级延迟时间为1.5ty,与非门的延迟时间为1ty,在di和ti产生之后,只需2.5ty就可产生所有全部进位

⑶超前进位加法器 将以上二者结合起来即可完成,A和B各位作为各个AddBlock的输入,低一位的进位Ci-1作为本位AddBlock的C-1的输入。各个AddBlock输出的C_this和C_pass作为对应的Cmaker的thisi和passi的输入。

二、实验器材 QuartusII仿真软件,实验箱 三、实验结果 1.串行进位加法器结果 2.超前进位加法器结果

四、实验结果分析 1.实验仿真结果显示串行加法器比超前进位加法器快,部分原因应该是电路结构优化 不到位。另外由于计算的位数比较少,超前进位加法链结构较复杂,所以优势没体现出来,反倒运作的更慢一点。当位数增加的时候,超前进位加法器会比串行的更快。 2.波形稳定之前出现上下波动,应该与“竞争冒险”出现的情况类似,门的延迟和路径 的不同导致了信号变化时到达的时间有先有后,因此在最终结果形成前出现了脉冲尖峰和低谷;另外也可能部分原因由于电路结构优化的不到位所致

模拟乘法器调幅AM、DSB、SSB实验报告

模拟乘法器调幅(AM、DSB、SSB)实验报告

————————————————————————————————作者:————————————————————————————————日期:

实验十二模拟乘法器调幅(AM、DSB、SSB) 一、实验目的 1.掌握用集成模拟乘法器实现全载波调幅。抑止载波双边带调幅和单边带调幅的方法。 2.研究已调波与调制信号以及载波信号的关系。 3.掌握调幅系数的测量与计算方法。 4.通过实验对比全载波调幅、抑止载波双边带调幅和单边带调幅的波形。 5.了解模拟乘法器(MC1496)的工作原理,掌握调整与测量其特性参数的方法。 二、实验内容 1.调测模拟乘法器MC1496正常工作时的静态值。 2.实现全载波调幅,改变调幅度,观察波形变化并计算调幅度。 3.实现抑止载波的双边带调幅波。 4.实现单边带调幅。 三、实验原理 幅度调制就是载波的振幅(包络)随调制信号的参数变化而变化。本实验中载波是由晶体振荡产生的465KHz高频信号,1KHz的低频信号为调制信号。振幅调制器即为产生调幅信号的装置。 1.集成模拟乘法器的内部结构 集成模拟乘法器是完成两个模拟量(电压或电流)相乘的电子器件。在高频电子线路中,振幅调制、同步检波、混频、倍频、鉴频、鉴相等调制与解调的过程,均可视为两个信号相乘或包含相乘的过程。采用集成模拟乘法器实现上述功能比采用分离器件如二极管和三极管要简单得多,而且性能优越。所以目前无线通信、广播电视等方面应用较多。集成模拟乘法器常见产品有BG314、F1596、MC1495、MC1496、LM1595、LM1596等。 (1)MC1496的内部结构 在本实验中采用集成模拟乘法器MC1496来完成调幅作用。MC1496是四象限模拟乘法器。其内部电路图和引脚图如图12-1所示。其中V1、V2与V3、V4组成双差分放大器,以反极性方 式相连接,而且两组差分对的恒流源V5与V6又组成一对差分电路,因此恒流源的控制电压可 图12-1 MC1496的内部电路及引脚图 正可负,以此实现了四象限工作。V7、V8为差分放大器V5与V6的恒流源。 (2)静态工作点的设定 1)静态偏置电压的设置

大整数乘法(分治法)

#include #include #include #include #define DATASIZE 1000 //该函数用以接收用户输入的大整数,返回值为该大整数的数字位数 int InputBigInt(int arr[]) { char ch; int i=0; printf("Input a Big Interger:"); while(1) { scanf("%c",&ch); if(ch=='\n') break; else arr[i++]=ch-'0'; } return i; } //该函数通过在较短的大整数之前填充0的方式,将两个大整数的位数对齐,返回值为较长的那个大整数的位置 int AlignArray(int *a,int len_a,int *b,int len_b) { int len_align=len_a; if(len_a>len_b) { for(int i=len_b-1;i>=0;i--) b[i+(len_a-len_b)]=b[i]; for(int i=0;i=0;i--) a[i+(len_b-len_a)]=a[i]; for(int i=0;i

a[i]=0; len_align=len_b; } return len_align; } //该函数通过删去大整数前面无意义的0来得到其真实的数字位数 int Adjust(int a[],int len) { while(a[0]==0) { int j=1; do{ a[j-1]=a[j]; j++; }while(j=0;i--) { int t=a[i]+b[i]+carry; c[i+1]=t%10; carry=t/10; } c[0]=carry; return length+1; } //两个长度为length的大整数做减法,得到的结果放到数组C中,长度为length int Sub(int a[],int b[],int c[],int length) { int borrow=0; for(int i=length-1;i>=0;i--) {

FPGA一位全加器设计实验报告

题目:1位全加器的设计 一.实验目的 1.熟悉QUARTUSII软件的使用; 2.熟悉实验硬件平台的使用; 3.掌握利用层次结构描述法设计电路。 二.实验原理 由于一位全加器可由两个一位半加器与一个或门构成,首先设计半加器电路,将其打包为半加器模块;然后在顶层调用半加器模块组成全加器电路;最后将全加器电路编译下载到实验箱,其中ain,bin,cin信号可采用实 验箱上SW0,SW1,SW2键作为输入,并将输 入的信号连接到红色LED管 LEDR0,LEDR1,LEDR2上便于观察,sum,cout 信号采用绿色发光二极管LEDG0,LEDG1来 显示。 三.实验步骤 1.在QUARTUSII软件下创建一工程,工程名为full_adder,芯片名为EP2C35F672C6; 2.新建Verilog语言文件,输入如下半加器Verilog语言源程序; module half_adder(a,b,s,co); input a,b; output s,co; wire s,co; assign co=a & b; assign s=a ^ b; Endmodule 3.保存半加器程序为,进行功能仿真、时序仿真,验证设计的正确性。 其初始值、功能仿真波形和时序仿真波形分别如下所示

4.选择菜单File→Create/Update→Create Symbol Files for current file,创建半加器模块; 5.新建一原理图文件,在原理图中调用半加器、或门模块和输入,输出引脚,按照图1所示连接电路。并将输入ain,bin,cin连接到FPGA的输出端,便于观察。完成后另保存full_adder。 电路图如下 6.对设计进行全编译,锁定引脚,然后分别进行功能与时序仿真,验证全加器的逻辑功能。其初始值、功能仿真波形和时序仿真波形分别如下所示

模拟乘法器调幅(AM、DSB、SSB)实验报告

实验十二模拟乘法器调幅(AM、DSB、SSB) 一、实验目的 1.掌握用集成模拟乘法器实现全载波调幅。抑止载波双边带调幅和单边带调幅的方法。 2.研究已调波与调制信号以及载波信号的关系。 3.掌握调幅系数的测量与计算方法。 4.通过实验对比全载波调幅、抑止载波双边带调幅和单边带调幅的波形。 5.了解模拟乘法器(MC1496)的工作原理,掌握调整与测量其特性参数的方法。 二、实验内容 1.调测模拟乘法器MC1496正常工作时的静态值。 2.实现全载波调幅,改变调幅度,观察波形变化并计算调幅度。 3.实现抑止载波的双边带调幅波。 4.实现单边带调幅。 三、实验原理 幅度调制就是载波的振幅(包络)随调制信号的参数变化而变化。本实验中载波是由晶体振荡产生的465KHz高频信号,1KHz的低频信号为调制信号。振幅调制器即为产生调幅信号的装置。 1.集成模拟乘法器的内部结构 集成模拟乘法器是完成两个模拟量(电压或电流)相乘的电子器件。在高频电子线路中,振幅调制、同步检波、混频、倍频、鉴频、鉴相等调制与解调的过程,均可视为两个信号相乘或包含相乘的过程。采用集成模拟乘法器实现上述功能比采用分离器件如二极管和三极管要简单得多,而且性能优越。所以目前无线通信、广播电视等方面应用较多。集成模拟乘法器常见产品有BG314、F1596、MC1495、MC1496、LM1595、LM1596等。 (1)MC1496的内部结构 在本实验中采用集成模拟乘法器MC1496来完成调幅作用。MC1496是四象限模拟乘法器。其内部电路图和引脚图如图12-1所示。其中V1、V2与V3、V4组成双差分放大器,以反极性方 式相连接,而且两组差分对的恒流源V5与V6又组成一对差分电路,因此恒流源的控制电压可 图12-1 MC1496的内部电路及引脚图 正可负,以此实现了四象限工作。V7、V8为差分放大器V5与V6的恒流源。 (2)静态工作点的设定 1)静态偏置电压的设置

大整数乘法问题

大整数乘法问题 一、问题分析 (1)采用分治法的思想,将一个多位的二进制数分成几个位数较少的二进制数进行计算。这样不断地往下分,直到分出的二进制数相对简单,可以直接算出来。 (2)对于这个算法,上课时讲过了时间复杂度为O(n^1.59)。 二、问题解决 (1)具体程序代码(c++) #include #include using namespace std; #define M 100 #define N 100 ifstream infile; ofstream outfile; int Weishu(int u[]); int *add(int *m,int *n); int *Mul(int n,int *u,int *v); int Weishu(int u[]) { int t=0; while(u[t]==1 || u[t]==0){ t++; } return t; } int *Mul(int n,int *u,int *v) { int w[M],x[M],y[M],z[M];

int a[M],b[M],c[M],d[M]; int wy[M],xz[M],wz[M],xy[M]; int *aa,*bb,*cc,*dd; int mid; int i,j; int Ji[M],k=0; if(n==1) { Ji[k]=u[0]*v[0]; k++; return(Ji); } else { mid=(n+1)/2; for(i=0;i

加法器实验报告

加法器实验报告 篇一:加法器实验报告 实验 __一__ 【实验名称】 1位加法器 【目的与要求】 1. 掌握1位全加器的设计 2. 学会1位加法器的扩展 【实验内容】 1. 设计1位全加器 2. 将1位全加器扩展为4位全加器 3. 使4位的全加器能做加减法运算 【操作步骤】 1. 1位全加器的设计 (1)写出1位全加器的真值表 (2)根据真值表写出表达式并化简 (3)画出逻辑电路 (4)用quartusII进行功能仿真,检验逻辑电路是否正确,将仿真波形截图并粘贴于此 (5)如果电路设计正确,将该电路进行封装以用于下一个环节 2. 将1位全加器扩展为4位全加器 (1)用1位全加器扩展为4位的全加器,画出电路图

(2)分别用两个4位补码的正数和负数验证加法器的正确性(注意这两 个数之和必须在4位补码的数的范围内,这两个数包括符号在内共4位),用quartusII进行功能仿真并对仿真结果进行截图。 3. 将4位的全加器改进为可进行4位加法和减法的运算器 (1)在4位加法器的基础上,对电路进行修改,使该电路不仅能进行加 法运算而且还能进行减法运算。画出该电路 (2)分别用两个4位补码的正数和负数验证该电路的正确性(注意两个 数之和必须在4位补码的数的范围内),用quartusII进行功能仿真并对仿真结果进行截图。 【附录】 篇二:加法器的基本原理实验报告 一、实验目的 1、了解加法器的基本原理。掌握组合逻辑电路在Quartus Ⅱ中的图形输入方法及文本输入方法。 2、学习和掌握半加器、全加器的工作和设计原理 3、熟悉EDA工具Quartus II和Modelsim的使用,能够熟练运用Vrilog HDL语言在Quartus II下进行工程开发、调试和仿真。

实验三---集成乘法器幅度调制实验

实验三---集成乘法器幅度调制实验

高频实验报告实验名称:集成乘法器幅度调制实验 南京理工大学紫金学院电光系一、实验目的

a) 通过实验了解集成乘法器幅度调制的工作原理,验证普通调幅波(AM ) 和抑制载波双边带调幅波(AM SC DSB -/)的相关理论。 b) 掌握用集成模拟乘法器MC1496实现AM 和DSB-SC 的方法,并研究调制信 号、载波信号与已调波之间的关系。 c) 掌握在示波器上测量与调整调幅波特性的方法。 二、实验基本原理与电路 1.调幅信号的原理 (一) 普通调幅波(AM )(表达式、波形、频谱、功率) (1).普通调幅波(AM )的表达式、波形 设调制信号为单一频率的余弦波: t U u m Ω=ΩΩcos ,载波信号为 : t U u c cm c ωcos = 普通调幅波(AM )的表达式为AM u =t t U c AM ωcos )()cos 1(t m U a cm Ω+=t c ωcos 式中, a m 称为调幅系数或调幅度。 由于调幅系数a m 与调制电压的振幅成正比,即 m U Ω越大, a m 越大,调幅波 幅度变化越大, 一般 a m 小于或等于1。如果 a m >1,调幅波产生失真,这种情况称为过调幅。 未调制状态调制状态 m a Ucm ω0 Ω 图3-1 调幅波的波形 (2). 普通调幅波(AM )的频谱 普通调幅波(AM )的表达式展开得: t U m t U m t U u c cm a c cm a c cm AM )cos(2 1 )cos(21cos Ω-+Ω++ =ωωω 它由三个高频分量组成。将这三个频率分量用图画出,便可得到图

基于FFT的大整数乘法

基于FFT 的大整数乘法 1背景 对于两个长度为n 的大整数,普通的大整数乘法的时间复杂度是()2n O ,而采用一种精心构造的分治算法,则可以将时间复杂度降低为()()585.13log 2n O n O ≈。此处则是受到快速傅立叶变换算法的启发,提出一种新的大整数乘法,该算法基于模-p 的有限域运算,采用类似于FFT 的算法,可以将大整数乘法的时间复杂度降低为() 5.1n O ,甚至,从某种意义上说,可以达到()n n O log 。 2 基础 2.1 FFT (可以参考《算法导论》及《算法概论》相关内容) 对于两个n-1次多项式 3 基于FFT 的大整数乘法 3.1大整数的表示方法 为简便起见,这里只考虑10进制大整数,但是这样并不会失去其一般性。对于一个10进制整数,可以将其表示为: ()01221110101010a a a a A n n n n +?++?+?=---- 这样,就可以将一个大整数对应到一个n-1次多项式上去: ()012211a x a x a x a x A N n n n n A ++++=---- ,其中{}9,8,7,6,5,4,3,2,1,0∈i a 3.2大整数的乘法 对于两个十进制大整数A N 和B N ,设A N 各个位上的数字如下: 0121a a a a n n -- 而B N 各个位上的数字如下: 0121b b b b n n -- 另外记多项式 ()012211a x a x a x a x A n n n n ++++=---- , ()012211b x b x b x b x B n n n n ++++=---- 于是有()10A N A =,()10B N B =。

加法器的基本原理实验报告

一、实验目的 1、了解加法器的基本原理。掌握组合逻辑电路在Quartus Ⅱ中的图形输入方法及文本输入方法。 2、学习和掌握半加器、全加器的工作和设计原理 3、熟悉EDA工具Quartus II和Modelsim的使用,能够熟练运用Vrilog HDL语言在Quartus II下进 行工程开发、调试和仿真。 4、掌握半加器设计方法 5、掌握全加器的工作原理和使用方法 二、实验内容 1、建立一个Project。 2、图形输入设计:要求用VHDL结构描述的方法设计一个半加器 3、进行编译,修改错误。 4、建立一个波形文件。(根据真值表) 5、对该VHDL程序进行功能仿真和时序仿真Simulation 三、实验步骤 1、启动QuartusⅡ 2、建立新工程NEW PROJECT 3、设定项目保存路径\项目名称\顶层实体名称 4、建立新文件Blok Diagram/Schematic File 5、保存文件FILE /SA VE 6、原理图设计输入 元件符号放置通过EDIT_>SYMBOL 插入元件或点击图标 元件复制 元件移动 元件转动 元件删除 管脚命名PIN_NAME 元件之间连线(直接连接,引线连接) 7、保存原理图 8 、编译:顶层文件设置,PROJECT_>Set as Top_Level 开始编译processing_>Start Compilation 编译有两种:全编译包括分析与综合(Analysis&Synthesis)、适配(Fitter)、编程(assembler)时序分析(Classical Timing Analysis)4个环节,而这4个环节各自对应相应菜单命令,可单独发布执行也可以分步执行

Booth乘法器实验报告

运算器部件实验:Booth乘法器 班级:软件工程 一、实验目的 理解并掌握乘法器的原理。 二、实验原理 Booth算法是一种十分有效的计算有符号数乘法的算法。算法的新型之处在于减法也可用于计算乘积。Booth发现加法和减法可以得到同样的结果。因为在当时移位比加法快得多,所以Booth发现了这个算法,Booth算法的关键在于把1分类为开始、中间、结束三种,如下图所示 当然一串0或者1的时候不操作,所以Booth算法可以归类为以下四种情况: Booth算法根据乘数的相邻2位来决定操作,第一步根据相邻2位的4中情况来进行加或减操作,第二部仍然是将积寄存器右移,算法描述如下: (1)根据当前为和其右边的位,做如下操作: 00: 0的中间,无任何操作; 01: 1的结束,将被乘数加到积的左半部分; 10:1的开始,积的左半部分减去被乘数; 11: 1的中间,无任何操作。 (2)将积寄存器右移1位。 因为Booth算法是有符号数的乘法,因此积寄存器移位的时候,为了保留符号位,进行算术右移。同时如果乘数或者被乘数为负数,则其输入为该数的补码,若积为负数,则输出结果同样为该数的补码。

三、实验步骤 (1)打开QuartusII (2)将子板上的JTAG端口和PC机的并行口用下载电缆连接,打开试验台电源。 (3)执行Tools→Programmer命令,将booth_multiplier.sof下载到FPGA 中。 (4)在实验台上通过模式开关选择FPGA-CPU独立调试模式010. (5)将开关CLKSEL拨到0,将短路子DZ3短接且短路子DZ4断开,使FPGA-CPU 所需要的时钟使用正单脉冲时钟。 四、实验现象 五、具体代码实现 端口声明: port ( clk: in std_logic; md : in std_logic_vector(3 downto 0); mr : in std_logic_vector(3 downto 0);

大整数的乘法实验报告

算法设计与分析实验报告 姓名:XXX 班级:XXX 学号:XXX

一、实验名称:大整数的乘法 时间:2012年3月7日,星期三,第四节 地点:12#311 二、实验目的及要求 实现大整数相乘,需要处理很大的整数,它无法在计算机硬件能直接表示的整数范围内进行处理。若用浮点数来表示它,则只能近似的表示它的大小,计算结果中的有效数字也受到限制。如要精确地表示大整数并在计算结果中要求精确地得到所有位数上的数字,就必须用软件的方法来实现大整数的算术运算。 三、实验环境 Vc++。 四、实验内容 从键盘上输入两个大整数,实现两个大整数相乘,并输出结果。 例如:在键盘上输入两个数a,b。 a=9876543210; b=369852147; 五、算法描述及实验步骤 定义三个数组a[100],b[100],c[199]。 用数组a来存放大整数a,a[0]=9,a[1]=8,a[2]=7,a[3]=6,a[4]=5,a[5]=4,a[6]=3, a[7]=2,a[8]=1,a[9]=0; 用数组b来存放大整数b,b[0]=3,b[1]=6,b[2]=9,b[3]=8,b[4]=5,b[5]=2,b[6]=1 b[7]=4,b[8]=7。 用数组c来存放数组a和b每一位的乘积, c[0]=a[0]*b[0]; c[1]=a[1]*b[0]+a[0]*b[1]; c[2]=a[2]*b[0]+a[1]*b[1]+a[0]*b[2]; …… …… c[17]=a[9]*b[8]; 六、调试过程及实验结果 void make(int a[],int aa,int b[],int bb,int c[]){ int i,j; for(i=0;i

加法器及差分放大器项目实验报告

加法器及差分放大器项目实验报告 一、项目内容和要求 (一)、加法器 1、任务目的: (1)掌握运算放大器线性电路的设计方法; (2)理解运算放大器的工作原理; (3)掌握应用仿真软件对运算放大器进行仿真分析的方法。 2、任务内容: 2.1 设计一个反相加法器电路,技术指标如下: (1)电路指标 运算关系:)25(21i i O U U U +-=。 输入阻抗Ω≥Ω≥K R K R i i 5,521。 (2)设计条件 电源电压Ec=±5V ; 负载阻抗Ω=K R L 1.5 (3)测试项目 A :输入信号V U V U i i 5.0,5.021±=±=,测试4种组合下的输出电压; B :输入信号V KHz U V U i i 1.0,1,5.021为正弦波±=信号,测试两种输入组合情况下的输出电 压波形。 C :输入信号V U i 01=,改变2i U 的幅度,测量该加法器的动态范围。 D :输入信号V U i 01=,V U i 1,2为正弦波,改变正弦波的频率,从1kHz 逐渐增加,步长为 2kHz ,测量该加法器的幅频特性。 2.2 设计一个同相加法器电路,技术指标如下: (1)电路指标 运算关系:21i i O U U U +=。 (2)设计条件 电源电压Ec=±5V ; 负载阻抗Ω=K R L 1.5 (3)测试项目 A :输入信号V U V U i i 1,121±=±=,测试4种组合下的输出电压; B :输入信号V KHz U V U i i 1,1,121为正弦波±=信号,测试两种输入组合情况下的输出电压 波形。 (二)、差分放大器 1、任务目的: (1)掌握运算放大器线性电路的设计方法; (2)理解运算放大器的工作原理; (3)掌握应用仿真软件对运算放大器进行仿真分析的方法。 2、任务内容 2.1 设计一个基本运放差分放大器电路,技术指标如下: (1)电路指标 运算关系:)(521i i O U U U --=。 输入阻抗Ω≥Ω≥K R K R i i 5,521。 (2)设计条件

大整数的四则运算高质量c语言程序

设计题目:大整数的四则运算 1. 功能简介:编写出实现大整数之间相加,相减,相乘,相除的程序,并输出计算结构。 课程设计要求:采用模块化程序设计 源程序中应有足够的注释 必须上机调试通过 注重算法运用,优化存储效率与运算效率 需提交源程序(含有注释)及相关文件(数据或数据库文件); 提交设计报告书。 2.总体结构:

数据初判断运算符 加法 正整数非正整 转变为 减法 转变为 乘法除法 转变为 退出 流程图:

3 .概要设计:

1)加法运算 利用两个整形数组分别存放两个数a和b的每一位的数值,最低位存放符号。如果a 和b同号,从最低为开始计算,如果有进位则保存在高一位,本为则减10,然后反序将计算后的各个位的数值保存在一个数组c并输出,如果a和b都是负数则在前面要输出负号,函数的返回值为c的位数。如果a和b异号,也即两个正整数相减,从最低位开始相减,如果要借位则本位加10再相减,高一位要减1,然后反序将计算后的各个位的数值保存在一个数组c并输出,在前面要输出相应的符号位。 2)减法运算 可将减法运算转化为加法运算,只要将被减数的符号改变即可。 3)乘法运算 符号存放在最低位,将其中一个数a的每一位分别乘以另一个数b的每一位,并将结果保存在数组c中,然后重复计算a的下一位跟b的每一位的乘积,把上一次计算保存在c 的值加上本次计算后的值,并保存在c自身中,直到a的最高位,最后输出符号和相应的计算结果。 4)除法运算 利用乘法和减法,将除数分别乘以1到9,直到其值大于等于被除数的对应的数,然后被除数对应的数减去其乘积,保存在一个数组中,下一次循环把它归到被除数中继续做除法运算,最后得到余数并输出。 4.函数功能: 1.void init(int a[],int b[],int *p1,int *p2) 2.功能说明:读入所要计算的数值,数据初始化 3.i nt plus(int a[],int b[],int c[],int m,int n) 4.功能说明:两个正整数相加 3. void change(int a[],int b[],int m,int n) 功能说明:当两异号数相加时,改变其符号以符合加法运算 5.i nt minus(int a[],int b[],int d[],int m,int n)

数电实验报告半加全加器

实验二 半加/减器与全加/减器 一、 实验目的: (1) 掌握全加器和半加器的逻辑功能。 (2) 熟悉集成加法器的使用方法。 (3) 了解算术运算电路的结构。 二、 实验设备: 1、 74LS00 (二输入端四与非门) 2、 74LS86 (二输入端四异或门) 3、 数字电路实验箱、导线若干。 Ver 4B 4A 4¥ 3B 3A 3Y 1A IB !Y 2A 2B 2Y GND (74LS86引脚图) 三、 实验原理: 两个二进制数相加,叫做半加,实现半加操作的电路,称为半加器。 A 表示 被加数,B 表示加数,S 表示半加和,Co 表示向高位的进位。 全加器能进行加数、被加数和低位来的信号相加,并给出该位的进位信号以 及和。 四、 实验内容: 用74LS00和74LS86实现半加器、全加器的逻辑电路功能。 (一)半加器、半减器 M=0寸实现半加,M=1时实现半减,真值表如下: (74LS00引脚 )

功能M A B S C 半加00000 00110 01010 01101 半减10000 10111 11010 11100 —s +/- ——co M (半加器图形符号) 2、 ⑴S真值表: 00011110 00110 11001 A ⑵C真值表: 00011110 00000 10101 C 二B(A二M)

(二)全加器、全减器 S CO C^BC i-1 ?(M 十 A )(B 十 C ) 、实验结果 半加器: S 二 AB AB = A 二 B C =B (A 二 M ) 全加器: S = A 二 B - C i-1 G 二GM C 2M CI B +/一

模拟乘法器调幅实验报告

模拟乘法调幅(AM、DSB) 实验报告 姓名: 学号: 班级: 日期:

模拟乘法调幅(A M、DSB )模块4 一、实验目的 1、掌握用集成模拟乘法器实现全载波调幅和抑止载波双边带调幅方法。 2、研究已调波与调制信号以及载波信号的关系。 3、掌握调幅系数的测量与计算方法。 4、通过实验对比全载波调幅、抑止载波双边带调幅波形。 5、了解模拟乘法器(MC1496)的工作原理,掌握调整与测量其特性参数的方法。 6、掌握用集成模拟乘法器构成调幅与检波电路的方法。 二、实验原理 调幅与检波原理简述: 调幅就是用低频调制信号去控制高频振荡(载波)的幅度,使高频振荡的振幅按调制信号的规律变化;而检波则是从调幅波中取出低频信号。 本实验中载波是465KHz 高频信号,10KHz 的低频信号为调制信号。 集成四象限模拟乘法器MC1496简介: 本器件的典型应用包括乘、除、平方、开方、倍频、调制、混频、检波、鉴相、鉴频动态增益控制等。它有两个输入端VX 、VY 和一个输出端VO 。一个理想乘法器的输出为VO=KVXVY ,而实际上输出存在着各种误差,其输出的关系为:VO=K (VX +VXOS )(VY+VYOS )+VZOX 。为了得到好的精度,必须消除VXOS 、VYOS 与VZOX 三项失调电压。集成模拟乘法器MC1496是目前常用的平衡调制/解调器,内部电路含有8 个有源晶体管。 MC1496的内部原理图和管脚功能如下图所示: MC1496各引脚功能如下: 1)、SIG+ 信号输入正端 2)、GADJ 增益调节端 3)、GADJ 增益调节端 4)、SIG- 信号输入负端 5)、BIAS 偏置端 6)、OUT+ 正电流输出端 7)、NC 空脚 8)、CAR+ 载波信号输入正端 9)、NC 空脚 10)、CAR- 载波信号输入负端 11)、NC 空脚 12)、OUT- 负电流输出端 13)、NC 空脚 14)、V- 负电源 实验电路说明 用MC1496集成电路构成的调幅器电路如下图所示 14131211109876 54 32 1SIG+GADJ GADJ SIG-BIAS OUT+NC V-NC OUT-NC CAR-NC CAR+ 126 23 14 51 1084

99乘法表实验报告

1705110208 杜志高 运用javascript生成九九乘法表 实验要求:javascript做九九乘法表及网页计算器 实验目的:1.掌握javascript语言的基本概念 2.掌握javascript语言画表格 实验环境:1.IE 2.记事本 实验过程:1.打开记事本 2.输入代码 Multiply Chart --------------------------------------------------------------------------

相关文档
相关文档 最新文档