基于链表的支持任意位数输入的运算方法及运算器技术

技术编号:4167354 阅读:232 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种基于链表的支持任意位数输入的运算方法及运算器。该输入运算的操作数支持任意位数输入,通过将操作数进行分割,把整数部分的各数值逆序存储于整数链表,将小数部分的各数值逆序存储于小数链表;用整数链表、小数链表及正负标志一起来表示一个任意位数的数据结构,将整数链表、小数链表及正负标志进行相互运算,得到显示正负标志、逆序显示整数链表中的数值、小数点、逆序显示小数链表中的数值;最后按原序规则处理输出最后运算结果。它具有如下优点:1、不限于数据类型存储空间容量的限制,可支持任意位数的输入;2、实现加减乘除多功能的高速运算,功能性强且运算速度快;3、该运算方法基于软件实现,不增加硬件成本投入。

Method and arithmetic unit for supporting arbitrary digit input based on linked list

The invention discloses an operation method and an arithmetic unit for supporting arbitrary digit input based on a linked list. The number of operation of the input operation support arbitrary digit input by dividing the operands, the integer part of the numerical inverse stored in an integer list, the decimal part of the numerical inverse stored in decimal integer, decimal list; list list and sign up positive and negative data structure for representing an arbitrary number of integers the list, the decimal list and the plus and minus signs for each operation, are showing positive and negative signs, reverse display, numerical decimal point, the reverse shows an integer list value in decimal list; finally, according to the original rules of order processing output final result. It has the following advantages: 1, not limited to the type of data storage capacity constraints, can support any number of bits of the input; 2, realize high speed operation of the multifunctional add, subtract, multiply and divide functional, strong and fast operation; 3, the calculation method based on the software, without increasing hardware cost.

【技术实现步骤摘要】

本专利技术涉及一种基于链表的支持任意位数输入的运算方法及运算器
技术介绍
在windows、li皿x系统下,处理加减乘除运算的运算器一般都采用double类型作 为基本数据,进行数值间的相互运算,非常方便使用。double类型存储为八字节的双精度 浮点数字,它表示双精度64位IEEE 754值,能够以约15位的准确度表示大至10308 (正或 负)的数字和小至10-323的数字,double类型还可以表示NaN(非数字)、正负无穷和正负 零,但是由于double本身的存储空间容量的约束,对于需要非常精确数字或超过double容 量的空间范围或输入超过double空间范围的数,运算将会出现溢出错误,因此会无法得到 运算结果问题。 针对以上问题,有人提出了新的设计方案,如国家知识产权局专利库公开了的申 请号为200510120279. 8,任意精度运算器、任意精度运算方法和电子设备,该任意精度运 算器包括主处理部,从低位起,每次N位的对第一任意精度值和第二任意精度值的每个值 进行分割,并作为N位长度的第一输入值和第二输入值依次输出。该方案通过电路实现无 论数据的精度如何,均可采用同一计算算法进行运算,突破固定长整数加减法的运算,效率 较高,但是该方法存在以下不足1、需要相应硬件电路来实现,实现比较复杂,不利于节约 成本;2、运用该方法实现功能有限,只能进行加减运算,无法实现乘法和除法的运算;3、操 作对象仅限于可变长整数的位数运算,不支持小数位运算;4、移植性不高;因此现有技术 在某些场合依然不够适用。
技术实现思路
本专利技术针对
技术介绍
运算器实现功能的不足,提出一种基于链表的可实现支持任 意位数输入运算、实现加减乘除多种功能、实现任意位整数及小数位输入运算的方案。 本专利技术解决其技术问题所采用的技术方案是 基于链表的支持任意位数输入的运算方法,其特征在于所述运算方法主要通过 如下步骤实现 对输入任意位数的操作数结构体进行分割处理,输出整数部分、小数部分及正负 标志; 将整数部分的各数值逆序存储于整数链表中,小数部分的各数值逆序存储于小数 链表中; 将整数链表、小数链表及正负标志进行相互运算,得到显示正负标志、逆序显示整 数链表中的各数、小数点、逆序显示小数链表中的各数,最后按原序规则处理输出最后运算 结果。 —较佳实施例中,所述基于链表的支持任意位数输入的运算方法包括加法运算。 进一步的,所述加法运算方法通过以下步骤实现 步骤107A,按原序规则处理输出加法运算的结果; 步骤101A,对输入的任意位数操作数的结构体进行分割为整数部份、小数部份及 正负标志,将整数部分的各位数值逆序存储为整数链表,小数部分的各位数值逆序存储为 小数链表; 步骤102A,判断正负标志; 如果两操作数都为负,得到结果数的正负标志为负数,执行步骤103A ; 如果两操作数都为正,得到结果数的正负标志为正数,继续执行步骤103A ; 如果两操作数为一正一负,则执行减法运算; 步骤103A,对两操作数的小数链表进行快速加法运算,得到结果数的小数链表与 进位数; 步骤104A,对两操作数的整数链表进行快速加法运算,得到新的整数链表; 步骤105A,以进位数生成一个相应的整数链表与新的整数链表进行快速加法运 算,得到结果数的整数链表; 步骤106A,去除结果数的小数链表从第一结点开始的数字为0的连续结点,及结 果数的整数链表从末尾结点开始数字为0的连续结点; —较佳实施例中,所述基于链表的支持任意位数输入的运算方法包括减法运算。 进一步的,所述减法运算方法通过以下步骤实现 步骤101B,对输入的任意位数操作数的结构体进行分割为整数部份、小数部份及 正负标志,将整数部分的各位数值逆序存储为整数链表,小数部分的各位数值逆序存储为 小数链表; 步骤102B,判断正负标志; 如果两操作数为一正一负,则改变第二操作数的正负标志为正,返回两操作数的 加法运算; 如果两操作数为一负一正,则改变第一操作数的正负标志为正,结果数的正负标 志为负数,返回两操作数的加法运算;如果两操作数都为正,则执行步骤103B ; 步骤103B,比较第一操作数与第二操作数的大小; 如果第一操作数小于第二操作数,则改变第一操作数的正负标志为正,结果数的 正负标志为负,返回两操作数的加法运算; 如果第一操作数大于或等于第二操作数,则执行步骤104B ; 步骤104B,得到结果数的正负标志为正数; 步骤105B ;对两操作数的小数链表进行快速减法运算,得到结果数的小数链表与 进位数; 步骤106B,对两操作数的整数链表进行快速减法运算得到新的整数链表; 步骤107B,以进位数生成一个相应的整数链表,并与新生成的整数链表进行快速减法运算,得到结果数的整数链表; 步骤108B,去除结果数小数链表的从第一结点开始的数字为0的连续结点,与结 果数的整数链表从末尾结点开始的数字为0的连续结点; 步骤109B,按原序规则处理输出减法运算的结果; —较佳实施例中,所述基于链表的支持任意位数输入的运算方法包括乘法运算。7 进一步的,所述乘法运算方法通过以下步骤实现 步骤101C,对输入的任意位数操作数A、 B的结构体进行分割为整数部份、小数部 份及正负标志,将整数部分的各位数值逆序存储为整数链表,小数部分的各位数值逆序存 储为小数链表; 步骤102C,判断正负标志; 如果A、B为一正一负,得到结果数的正负标志为负数; 否则,得到结果数的正负标志为正数; 步骤103C,分别去除A、 B的小数链表的从第一结点开始的数字为0的连续结点, 与整数链表从末尾结点开始的数字为0的连续结点; 步骤104C,将A、B的小数链长度和定为LEN,删除A、B的小数链表的所有结点直接 增加到各自整数链表的第一结点前,并销毁B的小数链表,得其新整数链表LA、LB ; 步骤105C,用q指向LB的第一结点,并初始化附加位为0和存放结果的只有一个 值为0的链表product ; 步骤106C,判断q所指向的结点是否存在;如果是,执行步骤107C,否则执行步骤110C ; 步骤107C,判断q所指向的结点值是否为0,如果是,执行步骤108C,否则执行步骤 109C ; 步骤108C,指针q移动下一个结点,附加位加1 ;跳转到步骤107C ; 步骤109C,将q所指向的结点的值与LA进行快速乘法运算,生成指定附加位数值 为0的结点加入LA的头结点之后,再加入product中并将指针q移动到下一个结点,附加 位加1 ; 步骤110C,销毁LA、LB,再将结果product中的前1EN个结点追加到原操作数A空 的小数链表中,再将product赋给原操作数A的整数链表; 步骤111C,去除结果数A的小数链表从第一结点开始数字为0的连续结点,与结果 数A的整数链表从末尾结点开始的数字为0的连续结点; 步骤112C,按原序规则处理输出乘法运算的结果; —较佳实施例中,所述基于链表的支持任意位数输入的运算方法包括除法运算。 进一步的,所述的除法运算方法通过以下步骤实现 步骤IOID,对输入的任意位数操作数A、 B的结构体进行分割为整数部份、小数部 份及正负标志,将整数部分的各位数值逆序存储为整数链本文档来自技高网...

【技术保护点】
基于链表的支持任意位数输入的运算方法,其特征在于:所述运算方法通过如下步骤实现:对输入任意位数的操作数结构体进行分割处理,输出整数部分、小数部分及正负标志;将整数部分的各数值逆序存储于整数链表中,小数部分的各数值逆序存储于小数链表中;将整数链表、小数链表及正负标志进行相互运算,得到显示正负标志、逆序显示整数链表的数值、小数点、逆序显示小数链表的数值;最后按原序规则处理输出最后运算结果。

【技术特征摘要】
基于链表的支持任意位数输入的运算方法,其特征在于所述运算方法通过如下步骤实现对输入任意位数的操作数结构体进行分割处理,输出整数部分、小数部分及正负标志;将整数部分的各数值逆序存储于整数链表中,小数部分的各数值逆序存储于小数链表中;将整数链表、小数链表及正负标志进行相互运算,得到显示正负标志、逆序显示整数链表的数值、小数点、逆序显示小数链表的数值;最后按原序规则处理输出最后运算结果。2. 根据权利要求1所述的基于链表的支持任意位数输入的运算方法,其特征在于所 述运算方法包括加法运算。3. 根据权利要求2所述的基于链表的支持任意位数输入的运算方法,其特征在于所 述的加法运算包括以下步骤步骤101A,对输入的任意位数操作数的结构体进行分割为整数部份、小数部份及正 负标志,将整数部分的各数值逆序存储为整数链表,小数部分的各数值逆序存储为小数链 表;步骤102A,判断正负标志;如果两操作数都为负,得到结果数的正负标志为负数,执行步骤103A ; 如果两操作数都为正,得到结果数的正负标志为正数,继续执行步骤103A ; 如果两操作数为一正一负,则执行减法运算;步骤103A,对两操作数的小数链表进行快速加法运算,得到结果数的小数链表与进位数;步骤104A,对两操作数的整数链表进行快速加法运算,得到新的整数链表;步骤105A,以进位数生成一个相应的整数链表与新的整数链表进行快速加法运算,得 到结果数的整数链表;步骤106A,去除结果数的小数链表从第一结点开始的数字为0的连续结点,及结果数 的整数链表从末尾结点开始数字为0的连续结点;步骤107A,按原序规则处理输出加法运算的结果。4. 根据权利要求1所述的基于链表的支持任意位数输入的运算方法,其特征在于所 述运算方法包括减法运算。5. 根据权利要求4所述的基于链表的支持任意位数输入的运算方法,其特征在于所述减法运算包括以下步骤步骤101B,对输入的任意位数操作数的结构体进行分割为整数部份、小数部份及正负标志,将整数部分的各数值逆序存储为整数链表,小数部分的各数值逆序存储为小数链表;步骤102B,判断正负标志;如果两操作数为一正一负,则改变第二操作数的正负标志为正,返回两操作数的加法 运算;如果两操作数为一负一正,则改变第一操作数的正负标志为正,结果数的正负标志为 负数,返回两操作数的加法运算;如果两操作数都为正,则执行步骤103B ;步骤103B,比较第一操作数与第二操作数的大小;如果第一操作数小于第二操作数,则改变第一操作数的正负标志为正,结果数的正负 标志为负,返回两操作数的加法运算;如果第一操作数大于或等于第二操作数,则执行步骤104B ; 步骤104B,得到结果数的正负标志为正数;步骤105B ;对两操作数的小数链表进行快速减法运算,得到结果数的小数链表与进位数;步骤106B,对两操作数的整数链表进行快速减法运算得到新的整数链表;步骤107B,以进位数生成一个相应的整数链表,并与新生成的整数链表进行快速减法 运算,得到结果数的整数链表;步骤108B,去除结果数小数链表的从第一结点开始的数字为0的连续结点,与结果数 的整数链表从末尾结点开始的数字为0的连续结点;步骤109B,按原序规则处理输出减法运算的结果。6. 根据权利要求1所述的基于链表的支持任意位数输入的运算方法,其特征在于所 述运算方法包括乘法运算。7. 根据权利要求6所述的基于链表的支持任意位数输入的运算方法,其特征在于所述乘法运算包括以下步骤步骤IOIC,对输入的任意位数操作数A、 B的结构体进行分割为整数部份、小数部份及 正负标志,将整数部分的各数值逆序存储为整数链表,小数部分的各数值逆序存储为小数 链表;步骤102C,判断正负标志;如果A、 B为一正一负,得到结果数的正负标志为负数; 否则,得到结果数的正负标志为正数;步骤103C,分别去除A、 B的小数链表的从第一结点开始的数字为0的连续结点,与整数链表从末尾结点开始的数字为0的连续结点;步骤104C,将A、B的小数链长度和定为LEN,删除A、B的小数链表的所有结点直接增加 到各自整数链表的第一结点前,并销毁...

【专利技术属性】
技术研发人员:林忠侣张志东
申请(专利权)人:厦门敏讯信息技术股份有限公司
类型:发明
国别省市:92[中国|厦门]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利