摘要:
在会计、统计核算中,输出数据精度一般取小数点后两位,在其他数据处理中,也经常限定几位小数的精度。但计算机进行定点数运算时,只有整数、单精度(8位数)和双精度(16位数)三种精度类型。由于计算和输出(如打印)精度不同,往往造成计算值与输出(打印)值不一致的现象。例如10/3,在单精度类型时,计算值为3.333333,输出采用2位小数时,其舍入值为3.33。如将这两个值分别乘以4,前者为13.33332,舍入后为13.33,后者为13.32,出现计算值与输出值间的误差。
要消除这个误差,就要在运算程序上采取措施,使单项数进行除运算(包括小数乘)时,其商的精度与输出精度相一致。如要求输出精度为两位小数,则每项除运算的商也要舍入为两位小数。
限定精度的计算程序是,先将被除数的小数点后移X位(X=给定的小数位),除后舍入取整,再将商的小数点前移X位。
以IBMPCBASIC程序为例,设精度要求为2位小数,A为被除数,B为除数,C为商,其算式为:
C=CINT(A*100/B)/100
式中CINT为舍入取整函数,100为使操作数小数点后移(乘)或前移(除)2位。
注意:这里不能使用INT(X)、FIX(X)函数,因这两个函数虽可取整,但不进行舍入处理...
在会计、统计核算中,输出数据精度一般取小数点后两位,在其他数据处理中,也经常限定几位小数的精度。但计算机进行定点数运算时,只有整数、单精度(8位数)和双精度(16位数)三种精度类型。由于计算和输出(如打印)精度不同,往往造成计算值与输出(打印)值不一致的现象。例如10/3,在单精度类型时,计算值为3.333333,输出采用2位小数时,其舍入值为3.33。如将这两个值分别乘以4,前者为13.33332,舍入后为13.33,后者为13.32,出现计算值与输出值间的误差。
要消除这个误差,就要在运算程序上采取措施,使单项数进行除运算(包括小数乘)时,其商的精度与输出精度相一致。如要求输出精度为两位小数,则每项除运算的商也要舍入为两位小数。
限定精度的计算程序是,先将被除数的小数点后移X位(X=给定的小数位),除后舍入取整,再将商的小数点前移X位。
以IBMPCBASIC程序为例,设精度要求为2位小数,A为被除数,B为除数,C为商,其算式为:
C=CINT(A*100/B)/100
式中CINT为舍入取整函数,100为使操作数小数点后移(乘)或前移(除)2位。
注意:这里不能使用INT(X)、FIX(X)函数,因这两个函数虽可取整,但不进行舍入处理,不符合会计、统计的通常要求。也不能使用以“\”表示的整除除法,因整除除法是将被除数和除数先舍入取整再进行计算,其商则为截断取整。某些BASIC系统没有CINT(X)函数,只有INT(X)函数,如不进行负数除法运算,算式改为下式即可。
C=INT((A*100+B/2)/B)/100
式中“+B/2”的作用是四舍五入。
经过这个程序处理的单项除法数据,只要输出的精度值与之一致,无论进行多少次的运算,都不会出现尾数误差。