CN110908975A - 基于高精度取舍方式的误差可控的数据处理系统及方法 - Google Patents
基于高精度取舍方式的误差可控的数据处理系统及方法 Download PDFInfo
- Publication number
- CN110908975A CN110908975A CN201910993935.7A CN201910993935A CN110908975A CN 110908975 A CN110908975 A CN 110908975A CN 201910993935 A CN201910993935 A CN 201910993935A CN 110908975 A CN110908975 A CN 110908975A
- Authority
- CN
- China
- Prior art keywords
- numbers
- module
- calculation
- rounding
- reserved
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Probability & Statistics with Applications (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Fuzzy Systems (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Complex Calculations (AREA)
Abstract
本发明涉及数据分析技术领域,尤其涉及一种基于高精度取舍方式的误差可控的数据处理系统及方法。包括输入模块、判断模块、智能取舍模块、计算模块和输出模块;由输入模块向判断模块输入精度要求(即最终需要精确到小数点前/后第几位)或有效数字位数(即最终需要几位精确值),然后输入模块的原始数据经由智能取舍模块按照判断模块的要求处理,经由计算模块计算后由输出模块输出。本发明设计了对应的判断模块,能够根据输入数据及精度要求判断需要取舍的位数,减小数据处理过程中造成的误差,提高统计数据的匹配性和可用性,方便统计数据核对,有利于统计图表的制作,数据压缩及数字计算等。
Description
技术领域
本发明涉及数据分析技术领域,尤其涉及一种基于高精度取舍方式的误差可控的数据处理系统及方法。
背景技术
根据数据库等数据来源对数据进行处理,在金融、计算机、化工、电信等行业有着广泛应用,例如银行利率、汇率计算系统,电信的经分系统、微信等平台的商户分析系统等。近几年,大数据应用快速普及,并从电子商务、互联网等行业向传统的金融、政府、公共事业、能源、交通等行业快速扩展。而随着大数据应用在金融、计算机、电信、政府、公共事业、能源、交通、制造等行业的普及,如何合理的开展大数据分析业务、管理和利用海量数据成为各行各业的关键问题,就意味着各行业对数据处理的要求也越来越高。
同时,基础科研对于计算能力要求越来越高,如天气预报、借助密度泛函理论的第一性原理计算,对数据的处理动辄以小时、甚至以月为单位,运算量非常巨大,且对运算精度要求非常之高。
而如果统计数据不准,分析方式不可靠,统计数据就会失真,进而导致统计分析出错,监督失责:
①数据处理对金融银行业的重要性。在现代,银行的业务越来越广泛,然而在货币兑换、利润计算等领域仍然普遍存在着近似计算,例如由于目前银行业主要借助四舍五入法进行近似计算,业务量又巨大,导致误差较大。
②数据处理对计算机领域的重要性。比如数据压缩方面,JPEG利用离散余弦变换来实现数据压缩,在压缩过程中,采用四舍五入对数据进行处理,从而造成数据失真率较高。以及对幂指函数进行计算时占用系统资源较大。
③基础科研数据计算量巨大,对于计算精度要求高,采用传统方式耗时久。
④数据处理对企业数据的重要性。在现代企业的经营管理中,涉及的数据错综复杂,企业数据包含各类信息,如不进行仔细的分类和处理将无法实现企业的有序经营,这将会制约企业的整体发展。由此可见,数据统计、数据处理对提高企业数据分类和处理能力具有重要作用,是满足企业经营管理的实际需要。
除此之外,提高统计数据质量、改善数据处理方法几乎是各行各业的重点问题。而目前数据处理实践中,由于大量数据为浮点数据,除加减法外很难做到精确计算,所以近似计算便在数据处理中占据了主导地位。而在近似计算中,目前主要有两种技术手段:
①直接利用人工选取或程序软件进行近似处理。而近似的原理主要是以确定的舍入上下限对原始数据进行取舍(如舍入上下限可设定为固定值,如分别设定为4、5时即四舍五入,若舍入上下限分别为4、6时即四舍六入,向上取整,向下取整等,或舍入上下限也可设定为变化值等方式),而上述所有方法在处理数据中均不可避免的会发生巨大的误差,且误差会产生叠加,难以做到精准计算。
②根据计算的真实结果对误差进行校正,而这种方法无疑会占用大量计算空间,跟真实计算并无二致,尤其是对于除法等运算几乎毫无帮助。
除此之外,目前的数据处理系统中,在计算结果出来之前,几乎没有方法评估计算结果的误差。因此,提高计算精度,改善数据处理方式既是重点,也是各行各业亟待解决的难点。
发明内容
本发明要解决的技术问题是目前数据处理实践中,由于大量数据为浮点数据,除加减法外很难做到精确计算,所以近似计算便在数据处理中占据了主导地位。而在近似计算中在计算结果出来之前,几乎没有方法评估计算结果的误差。
为解决上述问题,本发明提供了一种基于高精度取舍方式的误差可控的数据处理装置、系统及方法,设计了对应的判断模块,能够根据输入数据及精度要求判断需要取舍的位数,减小数据处理过程中造成的误差,提高统计数据的匹配性和可用性,方便统计数据核对,有利于统计图表的制作,数据压缩及数字计算等。
为达到上述目的,本发明具体通过以下技术手段实现:一种基于高精度取舍方式的误差可控的数据处理系统,包括输入模块、判断模块、智能取舍模块、计算模块和输出模块;由输入模块向判断模块输入精度要求,然后输入模块的原始数据经由智能取舍模块按照判断模块的要求处理,经由计算模块计算后由输出模块输出;
其中,输入模块为由操作者或其他系统输入原始数据、精度要求(即最终需要精确到小数点前/后第几位)或有效数字位数(即最终需要几位精确值),然后由判断模块判断舍入位数;或直接由操作者输入原始数据及舍入要求,直接进入智能取舍模块,并根据输入情况,选择返回原始值至智能取舍模块,返回精度要求或有效数字位数至判断模块;判断模块根据操作者提供的精度要求或有效数字位数,判断需要进行何种舍入操作;智能取舍模块为对输入数据进行标记、排序等预处理、按照取舍要求对数字进行取舍;计算模块调用计算功能对保留后的数字进行计算,同时,为了提高计算精确度,根据不同的应用环境,可采用不同的计算思路;输出模块按照精度要求或有效数字位数对计算结果进行取舍,接着输出计算结果。
进一步的,若输入精度要求,判断模块对于乘法的具体舍入判断如图4所示,若精度要求结果精确至nd位(若nd为正值表示精确至小数点后nd位,若nd为负值则表示精确至小数点前|nd|位,nd=0则表示精确至整数部分),将原数字按照科学计数法记作A1×10x1、A2×10x2、...、Ai×10xi,判断nj=0(nj为校正位数,为校验不通过时返回的一个大于0的数)时,保留位数(nk)=x1+x2...+xi+nd+i+r;判断nj≠0,nk=x1+x2...+xi+nd+i+nj+r。对于乘除混合的舍入判断如图6所示,若精度要求结果精确至nd位,将乘数、被除数按科学计数法记作m1×10x1、m2×10x2...mi×10xi,除数记作d1×10Y1、d2×10Y2...dj×10Yj;判断nj=0时,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+r;判断nj≠0,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+nj+r。
其中,简单除法即为i=j=1时乘除混合运算的特殊情况。
进一步的,若输入有效数字位数,判断模块对于乘除法的具体舍入判断如图7所示,若要求计算结果前nx位为精确值,判断nj=0时,nk=nx+r;判断nj≠0,nk=nx+nj+r。
进一步的,若参与运算的为加减乘除混合运算时,可根据图6求得每组乘除运算的nk,并取其中的某个值(nki),接着返回nk=nki或按照(64)进行判断;也可按照上述方式分别求得每组乘除运算的nk,并对每组运算分开取舍。
其中nki的取值可根据需要固定也可变化,如存在减法时可取其中最大值等。
进一步的,若参与运算的原始数字中存在近似值,可按上述方式进行判断,或在按照上述方式判断出nk之后,若nk≤Ny+r,正常返回nk,否则返回nk=Ny+r。
在加法运算中nk=nmax+r。
r为可变值,可根据计算精度的要求取值(可为正值、负值或零)。如:在启用精确校验模块,为保证计算精确无误,r初始值可取为r=2,并根据319-320步骤或人为进行合理化调整;在进行近似计算时,根据精度要求,取r=1或r=2等;在专门针对多数字乘除的处理系统中,r初始值可取为r=2,同时可引入算数个数对r的影响,如r=C+{[logo1N]取整/o2}取整(其中o1、o2为涉及到多数字运算时的纠正参数,C为根据运算需要确定的参数,如当o1、o2较小时C可取为1,这三个参数均可根据计算误差进行人为规定),或根据具体运算步骤与需要给r赋值,如一个计算分为M个步骤,则r可赋值为r=1+M/o2等,在加法运算中r=C+[lgN],并在必要时进行调整(见319-320)。在复杂加减乘除混合运算中r可根据需要固定为某值。
其中Ny为所有近似值中有效数字位数最少的数字的有效数字位数。
进一步的,智能取舍模块包括排序模块、存储模块和高精度取舍模块,排序模块对数字按照数字前几位的大小进行排序(以下以从小到大排序为例);存储模块接收返回的原始值;原始数据经存储模块按照判断模块的要求处理后进入高精度取舍模块处理,高精度取舍模块处理后的数据进入计算模块;存储模块处理过程如下:
(311)将输入模块输入的信息可在加减算法中正常存储原数字或取舍后再存储;
(312)在两数乘除法运算中,根据舍入位数的要求,将需要保留位数以内的数字及更低位的数字进行分别存储,如对123456保留至万位,即将原数字拆分为120000与3456,并进一步的根据科学计数法,以保留位数为单位,存储两数,即120000记作12×10^4,3456记作0.3456×10^4,将两数分别标记为ai×10^n,bi×10^n(bi<1);
(313)需要时可记录运算中出现的数量级最高的数字所对应的数量级(nmax)等数据。
(314)两数相乘中,求得两数字bi的和,并将该和按照给定的舍入上下限取整(如四舍五入、四舍六入等),记作n和;
(315)两数相除中,求得两数字bi的差,并将该差按照给定的舍入上下限取整,记作n差。
进一步的,存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,
进一步的,为后续操作方便,可在存储模块中存入算数的个数、运算步骤数,可分别记作N、M,
进一步的,若参与运算的数字存在近似值,记录近似值中有效位数最低的数字的有效数字位数为Ny。
(316)在多步乘除法运算中,根据舍入位数的要求及运算法则,将需要保留位数以内的数字及更低位的数字进行拆分,如对354321×123456÷234567保留至万位,即将原数字分别拆分为350000与4321,120000与3456,230000与4567,并进一步的根据科学计数法,以保留位数为单位,存储各数,并利用符号/字母等方式分别标记乘数(被除数)及除数,如350000记作35×10^4,4321记作0.4321×10^4;120000记作12×10^4,3456记作0.3456×10^4;230000与4567分别记作23×10^4与0.4567×10^4,并按照运算法则标记各数字,如标记为mi×10^n,mti×10^n(乘数或被除数)及dj×10^n,dtj×10^n(除数);
注:拆分主要是为本说明方便进行描述,在实践中可在排序、取舍等环节再进行拆分。
(317)在多步乘除法运算中,按照mi或dj的大小进行排序,如对354321×123456÷234567排序后,顺序为12(3456),23(4567),35(4321);
(317)在多步乘除法运算中,若采取先乘后除的运算结合方式,则先按照运算法则进行分类,接着对其中的乘数(被除数)、除数分别排序,如对354321×123456÷234567排序后,顺序为m1=12,m2=35,d1=23;
(318)在多步加减乘除混合运算中,按照运算优先级,先按316-317步骤对其中乘除法进行取舍,接着对其中加减法进行取舍,或对其中加减法进行精确计算。
进一步的,可以对舍入位数进行合理化调整,调整方式包括但不限于如下步骤:
(319)记录返回nj>0次数或运算次数为count1,总的计算次数或运算次数为count2。当count2大于或等于某一给定值时,若count1÷count2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;若count1÷count2≤thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;
其中:thr1/2为根据工作实际确定的阈值,当超过/低于这一阈值,保留精度进行适当提高或降低,以减小返回nj次数或降低单次运算量,下同。
对舍入位数进行调整的步骤如下:
(319)记录总的计算时间为T1,不返回nj>0的计算时间为T2,当T1大于或等于某一给定值时。若T1÷T2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;若T1÷T2<=thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;
若需要对r、o2、o1进行精确调整,可开启自适应模式:
(320)以原始数据进行计算并完成取舍,若取舍结果与本系统计算结果不同,则修改标记+1,在给定数据的计算中,当标记数>thr1时令r=r+1或调整o2、o1等一个或多个参数值;若标记数<=thr2时令r=r-1或调整o2、o1等一个或多个参数值。
进一步的,高精度取舍模块为了提高乘除法计算的精度,舍入方式不进行简单的四舍五入或四舍六入,这是因为四舍五入之类的舍入方式在计算乘除法时误差偏大,且误差会叠加。比如,当计算15*15=225时,若保留1位进行计算,原式将转化为20*20=400,实际值(225)跟估算值(400)之间差距过大,难以满足对于误差控制的要求。因此,为了兼顾计算精度及计算速度,对于乘除法的取舍应根据其取舍位的和或差进行取舍判断,处理过程如下:
(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块。
(322)在两数相乘中,若n和=0,则将两数保留为ai×10^n进行计算即可。比如12.1×16.1,若只保留至整数部分进行计算,则两数bi=0.1,两数bi的和为0.2,舍入后(即根据需要选择四舍五入或四舍六入,下同)n和=0(以下除特殊说明,均以四舍五入为例),则12.1×16.1转化为12×16;
(323)在两数相乘中,若n和=2,则将两数保留为(ai+1)×10^n进行计算即可。比如12.8×16.8,若只保留至整数部分进行计算,则两数bi=0.8,两数bi的和为1.6,舍入后n和=2,则12.8×16.8转化为13×17;
(324)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字反向取舍。比如12.6×16.6,若只保留至整数部分进行计算,则两数bi=0.6,两数bi的和为1.2,舍入后n和=1,则12.6×16.6转化为13×16。
(325)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字同向取舍。比如12.4÷16.6,若只保留至整数部分进行计算,则两数bi分别为0.4与0.6,bi的差为0.2,舍入后n差=0,则12.4÷16.6转化为12÷16。
(326)在两数相除中,若n差≠0,进行正常舍入。
进一步的,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块。
(322)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字反向取舍。比如12.6×16.6,若只保留至整数部分进行计算,则两数bi=0.6,两数bi的和为1.2,舍入后n和=1,则12.6×16.6转化为13×16。
(323)在两数相乘中,若n和≠1,进行正常舍入。
(324)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字同向取舍。比如12.4÷16.6,若只保留至整数部分进行计算,则两数bi分别为0.4与0.6,bi的差为0.2,舍入后n差=0,则12.4÷16.6转化为12÷16。
(325)在两数相除中,若n差≠0,进行正常舍入。
注:其中|no|为需要进行调整数字的个数,其他数字均保留为mi×10^n及di×10^n。
若no=0,则所有数字保留为mi×10^n及di×10^n。
若no>0,且该数字为乘数(被除数),则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数(被除数),将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n。
若no<0,且该数字为乘数(被除数),则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数(被除数),将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n。
(332)在多数字乘除运算中,若未按照运算法则对数字分类,若从中间开始取舍,求得fr=(i+j-|no|)/2+1。在(i+j-|no|)/2非整数时可根据需要进行取整。
注:这里主要列举了从中间开始取舍,除从中间开始进行取舍之外,也可从两端进行取舍,甚至可以包括跳跃式取舍。
(333)按mi及dj的大小顺序,若从中间开始取舍,对mi×10^n、dj×10^n中的数字进行舍入:对其中第fr往后no个数字做出调整;若从两头开始,则分别从序列最小/最大两端向中间进行取整;若采取跳跃式取舍,则将需要调整的数字相对均匀的分布在所有数字中:
(334)若从中间开始调整,如
1201000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012060031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=1则原式将转化为:
1200000000000×0.000120×12.0×0.000120÷119000000÷0.00000000120×0.120÷120×0.120≈174.25。
注:其他取舍顺序的部分实现方式见实施例7-10。且上述取舍方式同样适用于加减法,在加减法中除数对应减数,乘数或被除数对应其他数字,且加减法运算中无需排序,但需对齐小数点。而在混合运算中需按照运算优先级逐级结合。排序主要是为了降低运算产生的极限误差,如不进行排序(如混合运算中不进行排序)可被认为是一种特殊的跳跃取舍方式。
(331)在多数字乘除运算中,若数字未分类,则依次(按mi及dj的大小顺序,如从小到大,下同)求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限进行取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
(332)如
12010000100×0.0001202×12.030001×0.0001204÷12050007÷0.0000000012060031×0.12070001÷120.8×0.1209≈173.81,若保留前三位原式将转化为:
120000000000×0.00012×12.1×0.00012÷120000000÷0.00000000121×0.121÷121×0.121≈174.24。
(332)在每组分类中其中|no|个数字进行调整,其他数字均保留为mi×10^n,或dj×10^n。
若no=0,则所有数字保留为mi×10^n及di×10^n。
若no>0,且该数字为乘数(被除数),则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数(被除数),将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n。
若no<0,且该数字为乘数(被除数),则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数(被除数),将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n。
(332)同样,此时调整也可从中间开始取舍;可从两头开始,可分别从序列最小/最大两端向中间进行取整;还可采取跳跃式取舍,可将需要调整的数字相对均匀的分布在所有数字中。
(333)如
1201000010007×0.0001202×12.0300010×0.0001204×120500072×0.0000000012060031÷0.12070001÷120.8÷0.1209≈17237.52,中no=0,若保留前三位原式将转化为:
1200000000000×0.00012×12×0.00012×120000000×0.0000000012÷0.12÷120÷0.120≈17280。
(331)在多数字乘除运算中,若按照运算法则等对数字分类,则在每组分类中依次(按mi及dj的大小从小到大)求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限进行取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
(332)如
1201000010007×0.0001202×12.0300010×0.0001204×120500072×0.0000000012060031÷0.12070001÷120.8÷0.1209≈17237.52,若保留前三位原式将转化为:
1200000000000×0.00012×12.1×0.00012×121000000×0.0000000012÷0.121÷121÷0.12≈17280。
进一步的,计算模块即调用计算功能对保留后的数字进行计算。同时,为了提高计算精确度,根据不同的应用环境,可采用不同的计算思路。如对于银行复利等多数字乘除计算为保证实现计算精确到具体位数,可以采用如下两种计算思路:
一、按照上述流程将算式直接计算,从而求出最终值。
(41)按照计算法则直接计算,求得结果。其优点是简单易实现,缺点是随着计算的进行,位数会不断加大,运算量会增加。
二、为了保证计算精度,可以按照如下做法:
(41)由于除法运算不易控制计算精度,因此可以采取先乘后除的计算结合方式进行计算。
(42)将计算结果传入误差分析模块,进一步判断如何进行舍入以满足计算精度要求。
(43)若计算结果不满足对于精度的控制要求,则根据误差分析判断确定舍入方式,进而进行计算。
三、分组计算,然后求出最终结果。
(41)以r=C+{[logo1N]向下取整/o2}向上取整为例,按数字分组计算。
(42)求得[logo1N]向下取整/o2=s...rm;
(43)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的结果;
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行rm次后,令r=r-o3,或nk=nk-o3,再次进行取舍,并令rm=o2;
其中o3为与o1、o2相关的参数,当o1、o2不大时可令o3=1。
(45)反复进行上述部分操作,直至计算出最终结果。
(41)以r=C+{[logo1N]向下取整/o2}向上取整为例,按数字分组计算。
(42)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的结果;
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行o2次后,令r=r-o3,或nk=nk-o3,再次进行取舍;
(45)反复进行上述操作,直至计算出最终结果。
注:当o3=0时,该方式每次进行取舍时r值不变,即nk为一定值。除此之外,也可按照运算步骤进行分组,或数字与步骤混合分组计算。
进一步的,计算模块和输出模块之间还包括误差分析模块,误差分析模块为可关闭模块,若该模块关闭,则计算结果将直接进入输出模块,若需要对计算结果进行校验,则后置误差分析模块可有但不限于如下实现方式:
一、粗略误差分析模式:
(51)对于加减法,直接通过。
(52)对于多步乘除,取计算结果的前n位,记作c1。
(53)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q<1,则校验通过。
(54)Q为校正参数,可以根据工作实际选取恰当的值。比如,当两数相乘/除时,若保留位数为1位时Q可取值为Q=0.6×10^(1-r)等。
(55)进一步的,若c1×10^(-n)×Q≥1,且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1)。
二、精确误差分析模式:
(51)对于乘除法,取计算结果的前n位,记作c1。
(52)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q>=1,
且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1)。
(53)若c1×10^(-n)×Q<1,对于乘除法,判断计算结果需要保留的精确位的下一位,若计算结果需要保留的精确位的下一位为舍入上下限分别对应的数值(本说明以四舍五入为例,即舍入上下限分别对应4、5,下同),进行下一步校验,若不是,校验通过。
(541)若两数计算结果需要保留的精确位的下一位为4,则取计算结果的前n位,记作c1。
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk(Nk的取值,在多数情况下Nk=nk,在涉及减法的运算中若计算结果的数量级为L,且L<nmax,则Nk可取值为Nk=nk-nmax+L或最终保留位的下r位等,下同)位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
R为精确校验参数,当精确校验不通过时人为规定的校验值,比如可直接令R=1。
对于多步乘除法,取计算结果的前n位,记作c1。
若c1×10^(1-n)×Q<1。在计算结果第Nk位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
(542)若两数计算结果需要保留的精确位的下一位为5,则取计算结果的前n位,记作c1。
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
(55)对于多步乘除法,取计算结果的前n位,记作c1。
(56)若c1×10^(1-n)×Q<1。在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
显然,本领域的技术人员应当理解,为避免进入死循环,建议只进行一次或两次校验。
进一步的,误差分析模块还包括前置误差分析模块:
在部分场合下,为了1、核对已计算出的数据;2、避免计算完毕后返回nj,造成运算资源浪费;3、避免保留位数过多带来过大的运算压力;4、加减乘除混合运算。需要对数据进行前置的误差分析,然后再确定保留几位进行计算。
(61)核对已计算出的数据:
当需要对已计算出的数据进行核对时,若要保证校验计算结果的前nx位是否正确,则按照高精度取舍方式保留原数据的前nk=nx+1位进行分析。如,A报表统计出1.2535×5.3621≈6.721,要核对计算结果前2位是否正确,则对应保留其前3位进行校验,即原式可保留为1.25×5.37≈6.71。
且借助高精度取舍方式保留nx+1位计算出的两数乘除结果可保证前nx位误差极小,前nx+1位的误差小于等于计算结果首位的一半,其直观感受就是保留nx+1位求得的带误差的最大最小值的前nx+1位的误差小于等于计算结果首位,前nx位的误差不大于1。
(62)避免计算完毕后返回nj,造成运算资源浪费:
当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,并根据计算结果的前ny位返回nj值。
(63)避免保留位数过多带来过大的运算压力:
当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,若计算结果可写为rt×10^x,且需要保留计算结果至小数点后nd位,则保留位数为nk=x+nd+1+r。
(64)加减乘除混合运算:
当参与运算的为加减乘除混合运算时,可返回nk=nki进行取舍。可估计运算结果数量级进行判断。也可人为确定保留算式中的前ny位进行估算,若计算结果可写为rt×10^x1,若ny>|x1-nmax|,且x1≠nmax时,返回nj=|x1-nmax|+h,若x1=nmax时,返回nj=h(若rt首位为1,则h可取值为h=1,否则可取值为h=0);若ny≤|x1-nmax|,则返回nj=|x1-nmax|+Cr,或令ny=ny+Cr,再次进行验证(其中Cr为混合运算校正参数,为人为规定的一个参数)。
本发明的有益效果在于:
(1)具有智能判断模块,在乘除运算中可自行判断需要保留的计算位数,从而让计算结果的精度更为科学、可靠。
(2)独创性的设计了更为合理的取舍方式,在乘除运算中根据低位数字的和、差判断取舍数字的个数和/或方式,取舍精度更高,更有利于降低数据处理过程中造成的误差,降低常规舍入方法处理数据导致的数据误差,提高统计数据的一致性和可用性,使得数据处理结果更为精确。
(3)具有事后校验模块,可在计算结束之后便捷的对数据误差进行分析校对,而非很多校验系统需要在计算出精确结果后对误差进行校验。
(4)具有前置校验模块,可根据计算结果快速判断保留位数,接着调用存储数据进行取舍、计算。
(5)本系统有广泛的适用范围,除了计算机软、硬件实现之外,还可迁移至所有可迁移的范围,例如数据压缩处理、统计图表的制作、金融银行数据计算、促进统计数据的使用等。
(6)具有智能控制模块,可根据运算需要自行调整r等参数值大小,控制运算量及运算频率。
(7)具有多数字处理系统,能够在保证计算精度的同时尽量减小运算压力。
附图说明
图1是实施例1处理系统的模块结构图。
图2是实施例12处理系统的模块结构图。
图3是实施例12中针对多数字的处理系统的模块结构图。
图4是判断模块对于乘法的具体舍入判断流程图。
图5是判断模块对于除法的具体舍入判断流程图。
图6是判断模块对于乘除混合运算的具体舍入判断流程图。
图7是判断模块在给出有效数字位数时的具体舍入判断流程图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明的实施例和附图,对本发明的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1:
如:某证券交易所年交易8 8501 3734 5774股,成交金额为112 8173 75324213.24元。求平均每股成交金额为多少元(精确到小数点后5位)。
如图1所示,包括输入模块、判断模块、智能取舍模块、计算模块和输出模块;由输入模块向判断模块输入精度要求或有效数字位数,然后输入模块的原始数据经由智能取舍模块按照判断模块的要求处理,经由计算模块计算后由输出模块输出;
其中,输入模块为输入原始数据、精度要求或有效数字位数,然后由判断模块判断舍入位数;或直接由操作者输入原始数据及舍入要求,直接进入智能取舍模块,并根据输入情况,选择返回原始值至智能取舍模块,返回精度要求至判断模块;判断模块根据操作者提供的精度要求,判断需要进行何种舍入操作;智能取舍模块为对输入数据进行预处理、按照取舍要求对数字进行取舍;计算模块调用计算功能对保留后的数字进行计算;输出模块按照精度要求对计算结果进行取舍,接着输出计算结果。
其中,判断模块对于乘法的舍入判断如下,精度要求结果精确至小数点后nd位,将原数字按照科学计数法记作A1×10x1、A2×10x2、...、Ai×10xi,判断nj=0时,nk=x1+x2...+xi+nd+i+r;判断nj≠0,保留位数=x1+x2...+xi+nd+i+nj+r;
对于乘除混合的舍入判断如图6所示,若精度要求结果精确至nd位,将乘数、被除数按科学计数法记作m1×10x1、m2×10x2...mi×10xi,除数记作d1×10Y1、d2×10Y2...dj×10Yj;判断nj=0时,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+r;判断nj≠0,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+nj+r;
进一步的,若输入有效数字位数,判断模块对于乘法的具体舍入判断如图7所示,若要求计算结果前nx位为精确值,判断nj=0时,nk=nx+r;判断nj≠0,nk=nx+nj+r。
进一步的,若参与运算的为加减乘除混合运算时,可按上述方式求得每组乘除运算的nk,并取其中的某个值(nki),接着返回nk=nki或按照(64)进行判断;也可按照上述方式分别求得每组乘除运算的nk,并对每组运算分开取舍。
其中nki的取值可根据需要固定也可变化,如存在减法时可取其中最大值等。
进一步的,若参与运算的原始数字中存在近似值,可按上述方式进行判断,或在按照上述方式判断出nk之后,若nk≤Ny+r,正常返回nk,否则返回nk=Ny+r。
在加法运算中nk=nmax+r。
其中,r为可变值,可根据计算精度的要求取值(可为正值负值或零)。如:在启用精确校验模块,为保证计算精确无误,r初始值可取为r=2,并根据319-320步骤或人为进行合理化调整;在进行近似计算时,根据精度要求,取r=1或r=2等;在专门针对多数字乘除的处理系统中,r初始值可取为r=2,同时可引入算数个数对r的影响,如r=C+{[logo1N]取整/o2}取整(其中o1、o2为涉及到多数字运算时的纠正参数,C为根据运算需要确定的参数,如当o1、o2较小时C可取为1,这三个参数均可根据计算误差进行人为规定),或根据具体运算步骤与需要给r赋值,如一个计算分为M个步骤,则r可赋值为r=1+M/o2,在加法运算中r=C+[lgN]等,并在必要时进行调整(见319-320)。在复杂加减乘除混合运算中r可根据需要固定为某值。
其中Ny为所有近似值中有效数字位数最少的数字的有效数字位数。
如:根据本例开头所给数据,列式为:平均每股=112817375324213.24÷8850137345774元/股,取r=1,nd=5,nk=14-12+1+nd+r=9,原式保留前9位估算112817375000000÷8850137340000=12.74753元/股。
如:若按每组运算分开取舍,75.3201×42.1312+885.0131×37.34712,取r=1,nd=0,nk1=1+1+2+nd+r=5,nk2=2+1+2+nd+r=6,则原式转化为75.320×42.131+885.013×37.3471。
实施例2:
如:若给定运算1000个,thr1=0.02,thr2=0,nj返回次数为100,r初始值为1。
在实施例1的基础上,智能取舍模块包括排序模块、存储模块和高精度取舍模块,排序模块对数字按照数字前几位的大小进行排序(以下以从小到大排序为例);存储模块接收返回的原始值;原始数据经存储模块按照判断模块的要求处理后进入高精度取舍模块处理,高精度取舍模块处理后的数据进入计算模块;存储模块处理过程如下:
(311)将输入模块输入的信息可在加减算法中正常存储原数字或取舍后再存储;
(312)在两数乘除法运算中,根据舍入位数的要求,将需要保留位数以内的数字及更低位的数字进行分别存储,如对123456保留至万位,即将原数字拆分为120000与3456,并进一步的根据科学计数法,以保留位数为单位,存储两数,即120000记作12×10^4,3456记作0.3456×10^4,将两数分别标记为ai×10^n,bi×10^n(bi<1);
(313)需要时可记录运算中出现的数量级最高的数字所对应的数量级(nmax)等数据。
(314)两数相乘中,求得两数bi的和,并将该和按照给定的舍入上下限取整(如四舍五入、四舍六入等),记作n和;
(315)两数相除中,求得两数bi的差,并将该差按照给定的舍入上下限取整,记作n差。
进一步的,存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,
进一步的,为后续操作方便,可在存储模块中存入算数的个数、运算步骤数,可分别记作N、M,
进一步的,若参与运算的数字存在近似值,记录近似值中有效位数最低的数字的有效位数为Ny。
(316)在多步乘除法运算中,根据舍入位数的要求及运算法则,将需要保留位数以内的数字及更低位的数字进行拆分,如对354321×123456÷234567保留至万位,即将原数字分别拆分为350000与4321,120000与3456,230000与4567,并进一步的根据科学计数法,以保留位数为单位,存储各数,并利用符号/字母等方式分别标记乘数(被除数)及除数,如350000记作35×10^4,4321记作0.4321×10^4;120000记作12×10^4,3456记作0.3456×10^4;230000与4567分别记作23×10^4与0.4567×10^4,并按照运算法则标记各数字,如标记为mi×10^n,mti×10^n(乘数或被除数)及dj×10^n,dtj×10^n(除数);
注:拆分主要是为本说明方便进行描述,在实践中可在排序、取舍等环节再进行拆分。
(317)在多步乘除法运算中,按照mi或dj的大小进行排序,如对354321×123456÷234567排序后,顺序为12(3456),23(4567),35(4321);
(317)在多步乘除法运算中,若采取先乘后除的运算结合方式,则先按照运算法则进行分类,接着对其中的乘数(被除数)、除数分别排序,如对354321×123456÷234567排序后,顺序为m1=12,m2=35,d1=23;
(318)在多步加减乘除混合运算中,按照运算优先级,先按316-317步骤对其中乘除法进行取舍,接着对其中加减法进行取舍,或对其中加减法进行精确计算。
进一步的,可以对舍入位数进行合理化调整,调整方式包括但不限于如下步骤:
(319)记录返回nj>0次数或运算次数为count1,总的计算次数或运算次数为count2。当count2大于或等于某一给定值时,若count1÷count2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;若count1÷count2≤thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;
其中:thr1/2为根据工作实际确定的阈值,当超过/低于这一阈值,保留精度进行适当提高或降低,以减小返回nj次数或降低单次运算量。
如本实施例开头:若给定运算1000个,即count2=1000,thr1=0.02,thr2=0,nj返回次数为100,即count1=100,r初始值为1,则count1÷count2=0.1>thr1,则r=r+1=2。
实施例3:
在实施例1的基础上,智能取舍模块包括排序模块、存储模块和高精度取舍模块,排序模块对数字按照数字前几位的大小进行排序(以下以从小到大排序为例);存储模块接收返回的原始值;原始数据经存储模块照判断模块的要求处理后进入高精度取舍模块处理,高精度取舍模块处理后的数据进入计算模块;存储模块处理过程如下:
(311)将输入模块输入的信息可在加减算法中正常存储原数字或取舍后再存储;
(312)在两数乘除法运算中,根据舍入位数的要求,将需要保留位数以内的数字及更低位的数字进行分别存储;
(313)需要时可记录运算中出现的数量级最高的数字所对应的数量级(nmax)等数据。
(314)两数相乘中,求得两数字bi的和,并取整,记作n和;
(315)两数相除中,求得两数字bi的差,并取整,记作n差。
进一步的,存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,
进一步的,为后续操作方便,可在存储模块中存入算数的个数、运算步骤数,可分别记作N、M,
进一步的,若参与运算的数字存在近似值,记录近似值中有效位数最低的数字的有效位数为Ny。
(316)在多步乘除法运算中,根据舍入位数的要求及运算法则,将需要保留位数以内的数字及更低位的数字进行拆分,并进一步的根据科学计数法,以保留位数为单位,存储各数,并利用符号/字母等方式分别标记乘数(被除数)及除数,并按照运算法则标记各数字,如标记为mi×10^n,mti×10^n(乘数或被除数)及dj×10^n,dtj×10^n(除数);
(317)在多步乘除法运算中,按照mi或dj的大小进行排序;
(317)在多步乘除法运算中,若采取先乘后除的运算结合方式,则先按照运算法则进行分类,接着对其中的乘数(被除数)、除数分别排序;
(318)在多步加减乘除混合运算中,按照运算优先级,先按316-317步骤对其中乘除法进行取舍,接着对其中加减法进行取舍,或对其中加减法进行精确计算。
进一步的,可以对舍入位数进行合理化调整,调整方式包括但不限于如下步骤:
(319)记录总的计算时间为T1,不返回nj>0的计算时间为T2,当T1大于或等于某一给定值时。若T1÷T2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;若T1÷T2<=thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;
其中:thr1/2为根据工作实际确定的阈值,当超过/低于这一阈值,保留精度进行适当提高或降低,以减小返回nj次数或降低单次运算量。
实施例4:
在实施例1的基础上,智能取舍模块包括排序模块、存储模块和高精度取舍模块,排序模块对数字按照数字前几位的大小进行排序(以下以从小到大排序为例);存储模块接收返回的原始值;原始数据经存储模块照判断模块的要求处理后进入高精度取舍模块处理,高精度取舍模块处理后的数据进入计算模块;存储模块处理过程如下:
(311)将输入模块输入的信息可在加减算法中正常存储原数字或取舍后再存储;
(312)在两数乘除法运算中,根据舍入位数的要求,将需要保留位数以内的数字及更低位的数字进行分别存储;
(313)需要时可记录运算中出现的数量级最高的数字所对应的数量级(nmax)等数据;
(314)两数相乘中,求得两数字bi的和,并取整,记作n和;
(315)两数相除中,求得两数字bi的差,并取整,记作n差。
进一步的,存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,
进一步的,为后续判断误差方便,在存储模块中存入算数的个数,记作N,
进一步的,若参与运算的数字存在近似值,记录近似值中有效位数最低的数字的有效位数为Ny。
(316)在多步乘除法运算中,根据舍入位数的要求及运算法则,将需要保留位数以内的数字及更低位的数字进行拆分,并进一步的根据科学计数法,以保留位数为单位,存储各数,并利用符号/字母等方式分别标记乘数(被除数)及除数,并按照运算法则标记标记各数字,如标记为mi×10^n,mti×10^n(乘数或被除数)及dj×10^n,dtj×10^n(除数);
(317)在多步乘除法运算中,按照mi或dj的大小进行排序;
(317)在多步乘除法运算中,若采取先乘后除的运算结合方式,则先按照运算法则进行分类,接着对其中的乘数(被除数)、除数分别排序;
(318)在多步加减乘除混合运算中,按照运算优先级,先按316-317步骤对其中乘除法进行取舍,接着对其中加减法进行取舍,或对其中加减法进行精确计算。
进一步的,若需要对r、o2、o1进行精确调整,可开启自适应模式:
(320)以原始数据进行计算并完成取舍,若取舍结果与本系统计算结果不同,则修改标记+1,在给定数据的计算中,当标记数>thr1时令r=r+1或调整o2、o1等一个或多个参数值;若标记数<=thr2时令r=r-1或调整o2、o1等一个或多个参数值。
实施例5:
在实施例2、3或4的基础上,高精度取舍模块处理两数字运算时对原始数字根据舍入要求舍入,处理过程如下:
(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块;
(322)在两数相乘中,若n和=0,则将两数保留为ai×10^n进行计算;
(323)在两数相乘中,若n和=2,则将两数保留为(ai+1)×10^n进行计算;
(324)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字正常舍入,另一个数字反向取舍;
如:对131241×241431保留前3位进行计算,n和=[0.241+0.431]取整=1,则131241正常舍入转化为131000,241431反向取舍转化为242000,原式转化为131000×242000。
(325)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字正常舍入,另一个数字同向取舍;
(326)在两数相除中,若n差≠0,进行正常舍入。
如:对31231÷54865保留前3位进行计算,n差=[0.65-0.31]取整=0,则31231正常舍入转化为31200,54865同向取舍转化为54800,原式转化为31200÷54800。
实施例6:
在实施例2、3或4的基础上,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块;
(322)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字正常舍入,另一个数字反向取舍;
(323)在两数相乘中,若n和≠1,进行正常舍入。
(324)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字正常舍入,另一个数字同向取舍;
(325)在两数相除中,若n差≠0,进行正常舍入。
如:对31231×54835保留前3位进行计算,n和=[0.35+0.31]取整=1,则31231正常舍入转化为31200,54835反向取舍转化为54900,原式转化为31200×54900。
实施例7:
在实施例2、3或4的基础上,高精度取舍模块处理在多数字运算时对原始数字根据舍入要求舍入,处理过程如下:
注:其中|no|为需要进行调整数字的个数,其他数字均保留为mi×10^n及di×10^n。
若no=0,则所有数字均保留为mi×10^n及di×10^n。
若no>0,且该数字为乘数(被除数),则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数(被除数),将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n。
若no<0,且该数字为乘数(被除数),则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数(被除数),将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n。
(332)在多数字乘除运算中,若未按照运算法则对数字分类,若从中间开始取舍,求得fr=(i+j-|no|)/2+1。在(i+j-|no|)/2非整数时可根据需要进行取整。
注:这里主要列举了从中间开始取舍,除从中间开始进行取舍之外,也可从两端进行取舍,甚至可以包括跳跃式取舍。
(333)按mi及dj的大小顺序,若从中间开始取舍,对mi×10^n、dj×10^n中的数字进行舍入:按照排序自小到大,对其中第fr往后|no|个数字做出调整;若从两头开始,则分别从序列最小/最大两端向中间进行取整;若采取跳跃式取舍,则将需要调整的数字相对均匀的分布在所有数字中:
(334)若从中间开始调整,如
1201000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012060031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=1则原式将转化为:
1200000000000×0.00012×12×0.000120÷119000000÷0.0000000012×0.12÷120×0.12≈174.25。
(334)若从两头调整,如
1196000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012010031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=2则只对其中两个数字进行调整,原式将转化为(调整头尾两个数字):
1200000000000×0.00012×12×0.00012÷120000000÷0.0000000012×0.12÷120×0.121≈174.24。
(334)若采取跳跃取舍方式,如
1196000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012010031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=2则只对其中两个数字进行调整,原式将转化为(调整其中两个数字):
1190000000000×0.000121×12.0×0.00012÷120000000÷0.00000000119×0.12÷120×0.12≈174.24。
(334)若只调整其中乘数(被除数),如
1196000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012010031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=2则只对其中两个乘数(被除数)进行调整,原式将转化为:
1190000000000×0.00012×12.1×0.000121÷120000000÷0.0000000012×0.120÷120×0.12≈174.23。
(334)若只调整其中除数,如
1196000010007×0.0001202×12.0300010×0.0001204÷120500072÷0.0000000012010031×0.12070001÷120.8×0.1209≈173.81,若保留前三位,其no=2则只对其中两个乘数(被除数)进行调整,原式将转化为:
1190000000000×0.000120×12×0.00012÷119000000÷0.0000000012×0.12÷119×0.12≈174.25。
(334)这种取舍方式同样适合于加减法,如
1196+1202+1203+1204-1205-1201+1207-1208+1209,若保留前三位,其no=2则只对其中两个数字进行调整,原式将转化为:1200+1210+1200+1200-1200-1200+1200-1200+1200。
实施例8:
在实施例2、3或4的基础上,高精度取舍模块处理在多数字运算时对原始数字根据舍入要求舍入,处理过程如下:
(331)在多数字乘除运算中,若数字未分类,则依次(按mi及dj的大小从小到大)求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限进行舍入(此处以四舍五入为例,下同)取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
(332)如
120100001001×0.001202×12.0300010×0.0001204÷120500072÷0.0000000012060031×0.12070001÷120.8×0.1209≈173.81,若保留前三位原式将转化为:
120000000000×0.0012×12.1×0.00012÷120000000÷0.00000000121×0.121÷121×0.121≈174.24。
实施例9:
在实施例2、3或4的基础上,高精度取舍模块处理在多数字运算时对原始数字根据舍入要求舍入,处理过程如下:
(332)对其中|no|个数字进行调整,其他数字均保留为mi×10^n,或dj×10^n。
若no=0,则所有数字均保留为mi×10^n及di×10^n。
若no>0,且该数字为乘数(被除数),则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数(被除数),将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n。
若no<0,且该数字为乘数(被除数),则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数(被除数),将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n。
(332)同样,此时调整可从中间开始取舍;也可从两头开始,则分别从序列最小/最大两端向中间进行取整;还可采取跳跃式取舍,则将需要调整的数字相对均匀的分布在所有数字中:
(333)若从中间开始调整,如
1201000010007×0.0001202×12.0300010×0.0001204×120500072×0.0000000012060031÷0.12070001÷120.8÷0.1209≈17237.52,中no=0,若保留前三位原式将转化为:
1200000000000×0.000120×12.0×0.000120×120000000×0.00000000120÷0.120÷120÷0.120≈17280。其他方式类似实施例7。
实施例10:
在实施例2、3或4的基础上,高精度取舍模块处理在多数字运算时对原始数字根据舍入要求舍入,处理过程如下:
(331)在多数字乘除运算中,若按照运算法则等对数字分类,则在每组分类中依次(按mi及dj的大小从小到大)求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
(332)如
1201000010007×0.0001202×12.0300010×0.0001204×120500072×0.0000000012060031÷0.12070001÷120.8÷0.1209≈17237.52,若保留前三位原式将转化为:
1200000000000×0.000120×12.1×0.000120×121000000×0.00000000120÷0.121÷121÷0.120≈17280。
实施例11:
在实施例7-10的基础上,在多数字运算时,可采用不同的计算思路来提高运算效率,处理过程包括但不限于如下方式:
一、按照上述流程将算式直接计算,从而求出最终值。
(41)按照计算法则直接计算,求得结果。其优点是简单易实现,缺点是随着计算的进行,位数会不断加大,运算量会增加。
二、为了保证计算精度,可以按照如下做法:
(41)由于除法运算不易控制计算精度,因此可以采取先乘后除的计算结合方式进行计算。如要计算64718264×2131241÷72357283×2431231÷54835787,则可先将原式乘除分开结合,原式转化为
(42)将计算结果传入误差分析模块,进一步判断如何进行舍入以满足计算精度要求。
(43)若计算结果不满足对于精度的控制要求,则根据误差分析判断确定舍入方式,进而进行计算。
三、分组计算,然后求出最终结果。
(41)以r=C+{[logo1N]向下取整/o2}向上取整为例,按数字分组计算。如要计算14718×21312÷32351×44312÷54835×63124÷78298×81241÷93212,设C=1,o1=o2=2,nk=4,则r=1+[log29]向下取整/2=1+2=3。
(42)求得[logo1N]向下取整/o2=s...rm。[logo1N]向下取整/o2=3/2=1...1。
(43)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的结果。由于14718×21312÷32351×44312÷54835×63124÷78298×81241÷93212中no=(8+2-1+2-5+4-8+1-2)/10=0,所以原式保留为14710×21310÷32350×44310÷54830×63120÷78290×81240÷93210,每组o1=2个算式,即原式转化为(14710×21310)(÷32350×44310)(÷54830×63120)(÷78290×81240)÷93210。
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行rm次后,令r=r-o3,或nk=nk-o3,再次进行取舍,并令rm=o2。
令o3=1,原式≈(14710×21310)(÷32350×44310)(÷54830×63120)(÷78290×81240)÷93210=(14710×21310)×(44310÷32350)×(63120÷54830)×(81240÷78290)÷93210=313470100×1.3697063369397×1.1511946014955×1.0376804189552÷93210,r=r-1=3-1=2,即nk=3,原式转化为 (如不调整顺序,则原式转化为314000000×1.37×1.15×1.03÷93200)...
(45)反复进行上述部分操作,直至计算出最终结果。
实施例12:
在实施例7-10的基础上,在多数字运算时,可采用不同的计算思路来提高运算效率,处理过程包括但不限于如下方式:
三、分组计算,然后求出最终结果。
(41)以r=C+[logo1N]向下取整/o2为例,按数字分组计算。
(42)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的结果;
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行o2次后,令r=r-o3,或nk=nk-o3,再次进行取舍;
(45)反复进行上述部分操作,直至计算出最终结果。
注:当o3=0时,该方式每次进行取舍时r值不变,即nk为一定值。除此之外,也可按照运算步骤进行分组,或混合分组计算。
如按步骤分组计算:14710×21310÷32350×44310-54830×63120÷78290×81240÷93210,按照运算结合方式,原式分为两步运算(先算乘除法,接着算其中的加减法),保留3位计算,原式转化为
实施例13:
如图2、3所示,在实施例2-12的基础上,计算模块和输出模块之间还包括误差分析模块;
误差分析模块为可关闭模块,若该模块关闭,则计算结果将直接进入输出模块,若需要对计算结果进行校验,则进入误差分析模块,误差分析模块分为粗略误差分析模式或精确误差分析模式:
其中,粗略误差分析模式处理过程如下:
误差分析模块为可关闭模块,若该模块关闭,则计算结果将直接进入输出模块,若需要对计算结果进行校验,则后置误差分析模块可有但不限于如下实现方式:
一、粗略误差分析模式:
(51)对于加减法,直接通过。
(52)对于多步乘除,取计算结果的前n位,记作c1。
(53)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q<1,则校验通过。
(54)Q为校正参数,可以根据工作实际选取恰当的值。比如,当两数相乘/除时,若保留位数为1位时Q可取值为Q=0.6×10^(1-r)等。
(55)进一步的,若c1×10^(-n)×Q≥1,且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1)。
二、精确误差分析模式:
(51)对于乘除法,取计算结果的前n位,记作c1。
(52)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q≥1,且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1)。
(53)若c1×10^(-n)×Q<1,对于乘除法,判断计算结果需要保留的精确位的下一位,若计算结果需要保留的精确位的下一位为舍入上下限分别对应的数值(以4、5为例),进行下一步校验,若不是,校验通过。
(541)若两数计算结果需要保留的精确位的下一位为4,则取计算结果的前n位,记作c1。
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk(Nk的取值,在多数情况下Nk=nk,在涉及减法的运算中若计算结果的数量级为L,且L<nmax,则Nk可取值为Nk=nk-nmax+L或最终保留位的下r位等,下同)位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
R为精确校验参数,当精确校验不通过时人为规定的校验值,比如可直接令R=1。
对于多步乘除法,取计算结果的前n位,记作c1。
若c1×10^(1-n)×Q<1。在计算结果第Nk位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
(542)若两数计算结果需要保留的精确位的下一位为5,则取计算结果的前n位,记作c1。
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
(55)对于多步乘除法,取计算结果的前n位,记作c1。
(56)若c1×10^(1-n)×Q<1。在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
显然,本领域的技术人员应当理解,为避免进入死循环,建议只进行一次或两次校验。
如,要校验实施例1,平均每股=112 8173 7532 4213.24÷8 8501 3734 5774元/股,取r=1,nd=5,nk=14-12+1+nd+r=9,原式保留前9位估算112 8173 7500 0000÷88501 3734 0000=12.747528元/股,取计算结果前2位,Q取值Q=0.5×10^(1-r),则c1×10^(-n)×Q=12×0.01×0.5<1,且小数点后第6位为8,校验通过。
实施例14:
在实施例13的基础上,误差分析模块还包括前置误差分析模块:
(61)核对已计算出的数据:当需要对已计算出的数据进行核对时,若要校验计算结果的前nx位是否正确,则按照高精度取舍方式保留原数据的前nx+1位进行分析。如,A报表统计出1.2535×5.3621≈6.721,要核对计算结果前2位是否正确,则对应保留其前3位进行校验,即原式可保留为1.25×5.37≈6.71。
且借助高精度取舍方式保留nx+1位计算出的两数乘除结果可保证前nx位误差极小,前nx+1位的误差小于等于计算结果首位的一半,其直观感受就是保留nx+1位求得的带误差的最大最小值的前nx+1位的误差小于等于计算结果首位,前nx位的误差不大于1。
(62)避免计算完毕后返回nj,造成运算资源浪费:当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,并根据计算结果的前ny位返回nj值。
(63)避免保留位数过多带来过大运算压力:当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,设计算结果可写为rt×10^x,且需要保留计算结果至小数点后nd位,则保留位数为nk=x+nd+1+r。
(64)加减乘除混合运算:当参与运算的为加减乘除混合运算时,可返回nk=nki进行取舍。可估计运算结果数量级进行判断。也可人为确定保留算式中的前ny位进行估算,若计算结果可写为rt×10^x1,若ny>|x1-nmax|,且x1≠nmax时,返回nj=|x1-nmax|+h,若x1=nmax时,返回nj=h(若rt首位为1,则h可取值为h=1,否则可取值为h=0);若ny≤|x1-nmax|,则返回nj=|x1-nmax|+Cr,或令ny=ny+Cr,再次进行验证(其中Cr为混合运算校正参数,为人为规定的一个参数)。
如
4274838.343211×14898274.434213÷41927.21324-37281749.4123×1232198.43231÷48937.43331中,设ny=3,则14800000÷41800×4270000≈1511866028.71≈1.51×10^10,则nmax=10,则原式转化为14800000÷41800×4270000-1230000×37300000÷48900≈573645169.81≈5.74×10^8,则返回nj=10-8=2。
实施例15:
一种基于高精度取舍方式的误差可控的数据处理方法,采用实施例1-14任一的数据处理系统对数据进行精度判断、计算、取舍和输出。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件、硬件方面的实施例甚至可以包含借助本系统进行笔算或心算等形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框和/或多个方框中指定的功能。这些计算机程序指令也可装载到计算机和/或其他可编程数据处理设备上,从而在计算机和/或其他可编程设备上执行的指令提供用于实现在流程图一个流程和/或多个流程和/或方框图一个方框和/或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (13)
1.一种基于高精度取舍方式的误差可控的数据处理系统,其特征在于:包括输入模块、判断模块、智能取舍模块、计算模块和输出模块;由输入模块向判断模块输入精度要求:即最终需要精确到小数点前/后第几位,有效数字位数:即最终需要几位精确值,然后输入模块的原始数据经由智能取舍模块按照判断模块的要求处理,经由计算模块计算后由输出模块输出;
其中,输入模块为输入原始数据、精度要求或有效数字位数,然后由判断模块判断舍入位数;或直接由操作者输入原始数据及舍入要求,直接进入智能取舍模块,并根据输入情况,选择返回原始值至智能取舍模块,返回精度要求或有效数字位数至判断模块;判断模块根据操作者提供的精度要求或有效数字位数,判断需要进行何种舍入操作;智能取舍模块为对输入数据进行标记、排序等预处理、按照取舍要求对数字进行取舍;计算模块调用计算功能对保留后的数字进行计算;输出模块按照精度要求对计算结果进行取舍,接着输出计算结果。
2.如权利要求1所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:判断模块对于乘法的舍入判断如下,若精度要求需要结果精确至nd位,若nd为正值表示精确至小数点后nd位,若nd为负值则表示精确至小数点前|nd|位,若nd=0则表示精确至整数部分,将原数字按照科学计数法记作A1×10x1、A2×10x2、...、Ai×10xi,判断nj=0时,保留位数nk=x1+x2...+xi+nd+i+r;判断nj≠0,nk=x1+x2...+xi+nd+i+nj+r;
对于乘除混合的舍入判断如下,若精度要求结果精确至nd位,将乘数、被除数按科学计数法记作m1×10x1、m2×10x2...mi×10xi,除数记作d1×10Y1、d2×10Y2...dj×10Yj;判断nj=0时,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+r;判断nj≠0,nk=x1+x2...+xi-Y1-Y2...-Yj+i+nd+nj+r;
若输入有效数字位数,要求计算结果前nx位为精确值,判断nj=0时,nk=nx+r;判断nj≠0,nk=nx+nj+r;
若参与运算的为加减乘除混合运算时,求得每组乘除运算的nk,并取其中的某个值nki,接着返回nk=nki或按照(64)进行判断;也可按照上述方式分别求得每组乘除运算的nk,并对每组运算分开取舍;
其中nki的取值可根据需要固定也可变化,如存在减法时可取其中最大值等;
若参与运算的原始数字中存在近似值,可按上述方式进行判断,或在按照上述方式判断出nk之后,若nk≤Ny+r,正常返回nk,否则返回nk=Ny+r;
在加法运算中nk=nmax+r;
其中,r为可变值,根据计算精度的要求、运算法则、算数个数取值;
其中Ny为所有近似值中有效数字位数最少的数字的有效数字位数。
3.如权利要求1所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:智能取舍模块包括排序模块、存储模块和高精度取舍模块;两数运算中原始数据经存储模块按照判断模块的要求处理后进入高精度取舍模块处理,处理过程如下:
(311)将输入模块输入的信息可在加减算法中正常存储原数字或取舍后存储;
(312)在乘除法运算中,根据舍入位数的要求,将需要保留位数以内的数字及更低位的数字进行分别存储,将两数分别标记为ai×10^n,bi×10^n;
(313)需要时可记录运算中出现的数量级最高的数字所对应的数量级nmax等数据;
(314)两数相乘中,求得两数字bi的和,并将该和按照给定的舍入上下限取整(如舍入上下限分别设定为4、5时即四舍五入,若舍入上下限分别为4、6时即四舍六入等),记作n和;
(315)两数相除中,求得两数字bi的差,并将该差按照给定的舍入上下限取整,记作n差;
存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,为后续操作方便,可在存储模块中存入算数的个数、运算步骤数,可分别记作N、M;
若参与运算的数字存在近似值,记录近似值中有效位数最低的数字的有效数字位数为Ny。
多数字运算中,原始数据可先经排序模块按照运算法则分类或不分类排序,排序方式如下:
(316)在多步乘除法运算中,根据舍入位数的要求及运算法则,将需要保留位数以内的数字及更低位的数字进行拆分,并进一步的根据科学计数法,以保留位数为单位,存储各数,并利用符号/字母等方式分别标记乘数、被除数与除数,并按照运算法则标记各数字,如标记乘数或被除数为mi×10^n,mti×10^n及除数为dj×10^n,dtj×10^n;
注:拆分主要是为本说明方便进行描述,在实践中可在排序、取舍等环节再进行拆分。
(317)在多步乘除法运算中,按照mi或dj的大小进行排序;
(317)在多步乘除法运算中,若采取先乘后除的运算结合方式,则先按照运算法则进行分类,接着对其中的乘数或被除数、除数分别排序;
(318)在多步加减乘除混合运算中,按照运算优先级,先按316-317步骤对其中乘除法进行取舍,接着对其中加减法进行取舍,或对其中加减法进行精确计算。
4.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:存储模块在多步计算中,根据步骤逐步满足或求得总数进而予以判断,判断时将在存储模块中存入算数的个数,记作N;对舍入位数进行调整的步骤如下:
(319)记录返回nj>0次数或运算次数为count1,总的计算次数或运算次数为count2;当count2大于或等于某一给定值时,若count1÷count2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;若count1÷count2≤thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令count1=0,count2=0;
其中:thr1/2为根据工作实际确定的阈值,当超过/低于这一阈值,保留精度进行适当提高或降低,以减小返回nj次数或降低单次运算量,下同;
或者,(319)记录总的计算时间为T1,不返回nj>0的计算时间为T2,当T1大于或等于某一给定值时。若T1÷T2>thr1时令r=r+1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;若T1÷T2<=thr2时令r=r-1或调整o2、o1等一个或多个参数值或校验频率,且令T1=0,T2=0;
或者,(320)在取舍模块以原始数据进行计算并完成取舍,若取舍结果与本系统计算结果不同,则修改标记+1,在给定数据的计算中,当标记数>thr1时令r=r+1或调整o2、o1等一个或多个参数值;若标记数<=thr2时令r=r-1或调整o2、o1等一个或多个参数值。
5.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:在两数字运算时,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块;
(322)在两数相乘中,若n和=0,则将两数保留为ai×10^n进行计算即可;
(323)在两数相乘中,若n和=2,则将两数保留为(ai+1)×10^n进行计算即可;
(324)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字反向取舍;
(325)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字同向取舍;
(326)在两数相除中,若n差≠0,进行正常舍入。
或者,(321)加减法运算直接跳入计算模块进行精确计算,或取舍后进入计算模块;
(322)在两数相乘中,若n和=1,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字反向取舍;
(323)在两数相乘中,若n和≠1,进行正常舍入;
(324)在两数相除中,若n差=0,接着比较两数ai的大小,ai小的数字按照舍入上下限正常舍入,另一个数字同向取舍;
(325)在两数相除中,若n差≠0,进行正常舍入。
6.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:在多数字运算时,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(331)在多数字乘除运算中,若数字未分类,首先求得
注:其中|no|为需要进行调整数字的个数,其他数字均保留为mi×10^n及di×10^n;
若no=0,则所有数字保留为mi×10^n及di×10^n;
若no>0,且该数字为乘数或被除数,则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数(被除数),将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n;
若no<0,且该数字为乘数或被除数,则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数(被除数),将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n。
(332)在多数字乘除运算中,若未按照运算法则对数字分类,若从中间开始取舍,求得fr=(i+j-|no|)/2+1;在(i+j-|no|)/2非整数时可根据需要进行取整;从中间开始取舍,可按照大小顺序,对其中第fr往后|no|个数字做出调整;
(333)若按mi及dj的大小顺序,从两头开始,则分别从序列最小/最大两端向中间进行取整;
(334)除此之外,还可进行跳跃式取舍。
注:上述取舍方式同样适用于加减法,在加减法中除数对应减数,乘数或被除数对应其他数字,且需要对齐小数点。排序主要是为了降低运算产生的极限误差,如不进行排序,可被认为是一种特殊的跳跃取舍方式。
7.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:在多数字运算时,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(331)在多数字乘除运算中,若数字未分类,则按mi及dj的大小顺序,如从小到大依次求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限进行取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
8.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:在多数字运算时,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(332)对其中|no|个数字进行调整,其他数字均保留为mi×10^n,或dj×10^n;
若no=0,则所有数字保留为mi×10^n及di×10^n;
若no>0,且该数字为乘数、被除数,则原数保留为(mi+1)×10^n,若原数为除数,则原数保留为(di-1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中no个乘数、被除数,将其保留为(mi+1)×10^n,或no个除数,保留为(di-1)×10^n,其他数字保留为mi×10^n或dj×10^n;
若no<0,且该数字为乘数、被除数,则原数保留为(mi-1)×10^n,若原数为除数,则原数保留为(di+1)×10^n,除此之外其他数字均保留为mi×10^n或dj×10^n。或只调整其中|no|个乘数、被除数,将其保留为(mi-1)×10^n,或|no|个除数,保留为(di+1)×10^n,其他数字保留为mi×10^n或dj×10^n;
(332)同样,此时调整可按照mi或di的大小排序,从中间开始取舍;也可从两头开始,可分别从序列最小/最大两端向中间进行取整;还可采取跳跃式取舍,可将需要调整的数字相对均匀的分布在所有数字中。
9.如权利要求3所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:在多数字运算时,高精度取舍模块为了提高乘除法计算的精度,处理过程如下:
(331)在多数字乘除运算中,若按照分类,则按mi及dj的大小从小到大在每组数字中依次求得mti、(-dtj)的加和,并将该结果按照设定的舍入上下限进行取整,若取整结果与先前不同,则对应将mi×10^n保留为(mi+1)×10^n,或将dj×10^n保留为(dj+1)×10^n。
10.如权利要求1-9任一项所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:计算模块可根据参与运算的数字多少,采取合理操作,在保证计算精度的同时有效降低运算量:
一、直接计算,从而求出最终值;
(41)按照计算法则直接计算,求得结果;
二、为了保证计算精度,可以按照如下做法:
(41)由于除法运算不易控制计算精度,因此可以采取先乘后除的计算结合方式进行计算;
(42)将计算结果传入误差分析模块,并进一步判断如何进行舍入以满足计算精度要求;
(43)若计算结果不满足对于精度的控制要求,则根据误差分析判断确定舍入方式,进而进行计算;
三、分组计算,然后求出最终结果;
(41)以r=1+{[logo1N]向下取整/o2}向上取整为例,按数字分组计算;
(42)求得[logo1N]向下取整/o2=s...rm;
(43)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的计算结果;
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行rm次后,令r=r-o3,或nk=nk-o3,再次进行取舍,并令rm=o2;
其中o3为与o1、o2相关的参数,当o1、o2不大时可令o3=1。
(45)反复进行上述部分操作,直至计算出最终结果;
(41)以r=1+{[logo1N]向下取整/o2}向上取整为例,按数字分组计算;
(42)取舍后将参与运算的数字每o1个数字为一组,计算出每组数字的结果;
(44)对每组数字计算出的结果重新进行取舍,并重复上述操作,反复进行o2次后,令r=r-o3,或nk=nk-o3,再次进行取舍;
(45)反复进行上述操作,直至计算出最终结果。
除此之外,也可按照运算步骤进行分组,或数字与步骤混合分组计算。
11.如权利要求1-10任一项所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:计算模块和输出模块之间还包括误差分析模块;误差分析模块为可关闭模块,若该模块关闭,则计算结果将直接进入输出模块,若需要对计算结果进行校验,则进入误差分析模块,后置误差分析模块分为粗略误差分析模式或精确误差分析模式:
其中,粗略误差分析模式:
(51)对于加减法,直接通过;
(52)对于多步乘除,取计算结果的前n位,记作c1;
(53)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q<1,则校验通过;
(54)Q为校正参数,可以根据工作实际选取恰当的值。比如,当两数相乘/除时,若保留位数为1位时Q可取值为Q=0.6×10^(1-r);
(55)进一步的,若c1×10^(-n)×Q≥1,且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1);
精确误差分析模式:
(51)对于乘除法,取计算结果的前n位,记作c1;
(52)判断c1×10^(-n)×Q的大小,若c1×10^(-n)×Q>=1,且10^nj>c1×10^(-n)×Q≥10^(nj-1),则返回nj(nj≥1);
(53)若c1×10^(-n)×Q<1,对于乘除法,判断计算结果需要保留的精确位的下一位,若计算结果需要保留的精确位的下一位为舍入上下限分别对应的数值:如以四舍五入为例,则舍入上下限分别为4或5,进行下一步校验,若不是,校验通过;
(541)若两数计算结果需要保留的精确位的下一位为4,则取计算结果的前n位,记作c1;
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk(Nk的取值,在多数情况下Nk=nk,在涉及减法的运算中若计算结果的数量级为L,且L<nmax,则Nk可取值为Nk=nk-nmax+L或最终保留位的下r位等,下同)位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R;
R为精确校验参数,当精确校验不通过时人为规定的校验值,比如可直接令R=1;
对于多步乘除法,取计算结果的前n位,记作c1;
若c1×10^(1-n)×Q<1;在计算结果第Nk位加上c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R;
(542)若两数计算结果需要保留的精确位的下一位为5,则取计算结果的前n位,记作c1;
求得c1×10^(1-n)×Q的大小,接着在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R;
(55)对于多步乘除法,取计算结果的前n位,记作c1;
(56)若c1×10^(1-n)×Q<1。在计算结果第Nk位减去c1×10^(1-n)×Q,若该操作不会改变取舍结果,则校验通过,否则返回nj=R。
12.如权利要求11所述的基于高精度取舍方式的误差可控的数据处理系统,其特征在于:误差分析模块还包括前置误差分析模式:
(61)核对已计算出的数据:
当需要对已计算出的数据进行核对时,若要校验计算结果的前nx位是否正确,则按照高精度取舍方式保留原数据的前nk=nx+1位进行分析;
且借助高精度取舍方式保留nx+1位计算出的两数乘除结果可保证前nx位误差极小,前nx+1位的误差小于等于计算结果首位的一半,其直观感受就是保留nx+1位求得的带误差的最大最小值的前nx+1位的误差小于等于计算结果首位,且前nx位的误差不大于1。
(62)避免计算完毕后返回nj,造成运算资源浪费:
当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,并根据计算结果的前ny位返回nj值;
(63)避免保留位数过多带来过大的运算压力:
当需要降低运算压力时,可人为确定保留算式中的前ny位进行估算,若计算结果可写为rt×10^x,且需要保留计算结果至小数点后nd位,则保留位数为nk=x+nd+1+r;
(64)加减乘除混合运算:
当参与运算的为加减乘除混合运算时,可返回nk=nki进行取舍。可估计运算结果数量级进行判断。也可人为确定保留算式中的前ny位进行估算,若计算结果可写为rt×10^x1,若ny>|x1-nmax|,且x1≠nmax时,返回nj=|x1-nmax|+h,若x1=nmax时,返回nj=h,若rt首位为1,则h可取值为h=1,否则可取值为h=0。;若ny≤|x1-nmax|,则返回nj=|x1-nmax|+Cr,或令ny=ny+Cr,再次进行验证;
其中Cr为混合运算校正参数,为人为规定的一个参数。
13.一种基于高精度取舍方式的误差可控的数据处理方法,其特征在于:采用权利要求1-12任一项的数据处理系统对数据进行精度判断、计算、取舍和输出。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910993935.7A CN110908975A (zh) | 2019-10-18 | 2019-10-18 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
PCT/CN2020/104885 WO2021073196A1 (zh) | 2019-10-18 | 2020-07-27 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910993935.7A CN110908975A (zh) | 2019-10-18 | 2019-10-18 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110908975A true CN110908975A (zh) | 2020-03-24 |
Family
ID=69814602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910993935.7A Pending CN110908975A (zh) | 2019-10-18 | 2019-10-18 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110908975A (zh) |
WO (1) | WO2021073196A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111486888A (zh) * | 2020-04-14 | 2020-08-04 | 新石器慧通(北京)科技有限公司 | 误差校正方法、装置及无人车辆 |
CN111639929A (zh) * | 2020-05-29 | 2020-09-08 | 浙江百世技术有限公司 | 离线收银系统 |
WO2021073196A1 (zh) * | 2019-10-18 | 2021-04-22 | 汪浩 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116822253B (zh) * | 2023-08-29 | 2023-12-08 | 山东省计算中心(国家超级计算济南中心) | 适用于masnum海浪模式的混合精度实现方法及系统 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1359064A (zh) * | 2001-10-18 | 2002-07-17 | 何惠昭 | 水平放置圆形罐体标尺的设计制作方法 |
CN101794412A (zh) * | 2009-12-29 | 2010-08-04 | 金蝶软件(中国)有限公司 | 一种物料数值信息输出方法及系统 |
CN101907985B (zh) * | 2010-08-06 | 2013-03-20 | 上海交通大学 | 信息定点化处理装置及其处理方法 |
CN110908975A (zh) * | 2019-10-18 | 2020-03-24 | 汪浩 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
-
2019
- 2019-10-18 CN CN201910993935.7A patent/CN110908975A/zh active Pending
-
2020
- 2020-07-27 WO PCT/CN2020/104885 patent/WO2021073196A1/zh active Application Filing
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021073196A1 (zh) * | 2019-10-18 | 2021-04-22 | 汪浩 | 基于高精度取舍方式的误差可控的数据处理系统及方法 |
CN111486888A (zh) * | 2020-04-14 | 2020-08-04 | 新石器慧通(北京)科技有限公司 | 误差校正方法、装置及无人车辆 |
CN111639929A (zh) * | 2020-05-29 | 2020-09-08 | 浙江百世技术有限公司 | 离线收银系统 |
CN111639929B (zh) * | 2020-05-29 | 2023-10-27 | 浙江百世技术有限公司 | 离线收银系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2021073196A1 (zh) | 2021-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110908975A (zh) | 基于高精度取舍方式的误差可控的数据处理系统及方法 | |
CN110363281A (zh) | 一种卷积神经网络量化方法、装置、计算机和存储介质 | |
EP4087239A1 (en) | Image compression method and apparatus | |
US8751555B2 (en) | Rounding unit for decimal floating-point division | |
US20210209690A1 (en) | Order matching | |
WO2022017167A1 (zh) | 一种信息处理方法、系统、电子设备及存储介质 | |
CN111091245A (zh) | 一种参与有序用能企业的确定方法及装置 | |
CN110704424A (zh) | 一种应用于数据库的排序方法、装置及相关设备 | |
US20240046081A1 (en) | Data transfer for non-dot product computations on neural network inference circuit | |
US11604973B1 (en) | Replication of neural network layers | |
CN106997284A (zh) | 实现浮点运算操作的方法和装置 | |
CN116795324A (zh) | 混合精度浮点乘法装置和混合精度浮点数处理方法 | |
US11409523B2 (en) | Graphics processing unit | |
US7636670B2 (en) | Method and computer program product that determine values of characteristic value combinations for use in the production of products | |
CN114064784A (zh) | 一种企业研发费用智能归集方法、系统及电子设备 | |
CN115730694A (zh) | 一种软件工作量的预测方法和设备,及存储介质 | |
Graillat et al. | On the maximum relative error when computing integer powers by iterated multiplications in floating-point arithmetic | |
WO2019227415A1 (zh) | 一种评分卡模型的调整方法、装置、服务器及存储介质 | |
CN115829144B (zh) | 电网业务优化模型的建立方法及电子设备 | |
CN114510518B (zh) | 一种海量结构化数据的自适应聚合方法、系统及电子设备 | |
Tru | The Relationship between Education, Economic Growth and Unemployment: Evidence in Eastern Europe | |
KR940008610B1 (ko) | 고속 수렴 인자 결정 방법 및 프로세서 | |
Liu | Mixed-Precision Paterson--Stockmeyer Method for Evaluating Polynomials of Matrices | |
CN107229663B (zh) | 数据处理方法和装置以及数据表处理方法和装置 | |
EP2355015A1 (en) | Order matching |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |