毛森,王曉偉,楊宇,李光旭
(河南省計量科學研究院,鄭州 450047)
電子原始記錄數據的自動化處理功能不僅能夠提高計量技術人員的工作效率,降低技術人員工作強度,還能夠有效降低人工引入的差錯率[1-2]。隨著計量技術機構近年來的持續(xù)推廣普及,電子原始記錄在各計量儀器設備檢定、校準過程中的使用覆蓋率持續(xù)升高,技術人員對電子原始記錄的依賴程度日益加深[3]。電子原始記錄的實現方式有多種,從目前使用情況看,依托電子表格(以Excel 軟件為代表)對原始數據進行處理的方案較為普遍和成熟[4]。計量學對計量數據的計算及修約精度有較高要求,數據修約需嚴格符合GB/T 8170 規(guī)定[5]。由于計算機程序是采用二進制的方式進行數據存儲[6-8],運算過程采用浮點運算方式進行[9-11],這種計算方法會造成計算機計算結果與實際計算結果存在極為微小的偏差[12]。通常這種偏差對日常計算結果影響很小,但卻會給計量結果造成不可忽略的影響,從而對儀器的級別判定造成本質影響。
綜覽國內外公開出版的學術期刊,尚未發(fā)現有研究這一現象和專門探討數據自動化修約的報道。筆者以Excel 軟件為依托軟件,以兩種典型的修約方法為例,介紹浮點運算造成的痕量偏差在修約過程中對數據結果的影響及規(guī)避方法。
使用Excel 處理數據時,采用自帶的函數實現數據的修約,所用到的函數有IF()、Round()、MOD()、EVEN()、TRUNC()。以上函數的功能、各參數意義及使用規(guī)則見表1。
表1 Excel 部分函數用法及含義[13]
數據的修約是數據處理至關重要的一個環(huán)節(jié),數據修約的正確與否直接關系到儀器準確程度的判斷。在石油密度計檢定過程中,經常需要對其修正值進行修約運算,通常Excel 在數據修約過程中采用“四舍五入”的進舍規(guī)則,這種修約規(guī)則并不能滿足日常測量數據的處理要求。計量學中數字修約規(guī)則要符合GB/T 8170—2008 規(guī)定,即“四舍六入,逢五取偶”[14],俗稱“奇進偶不進”。要實現這種特殊的修約規(guī)則,則需要用到多種Excel 函數進行組合運算。
以下列舉兩種不同的方法對數據進行修約。
(1)方法一。具體實現過程:(為方便理解,默認對被修約數修約至個位)先使用ROUND 函數對被修約數進行四舍五入修約,再用返回值減去一個邏輯判斷的返回結果(用MOD 函數以2 作為除數對被修約數除求余,當余數等于0.5 時返回1,否則返回0)。修約公式為:
ROUND(被修約數,有效位數)-(MOD(被修約數*10^有效位數,2)=0.5)*10^-有效位數
(2)方法二。具體實現過程:首先要對被修約數進行底數為10 的乘冪運算,將被修約位數移至小數點后一位,再用MOD()函數對被修約數進行除數為1 的求余運算。如果余數不為0.5,則對被修約數用ROUND()函數進行“四舍六入”運算;反之,則對被修約數先用TURNC()函數做取整運算,后用EVEN()函數做向上取偶運算,從而實現“逢五取偶”運算。修約公式:
IF(MOD( 被 修 約 數*10^ 有 效 位,1)=0.5,EVEN(TRUNC( 被 修 約 數*10^ 有 效 位 數,0)),ROUND(被修約數*10^有效位數,0))/10^有效位數
修約公式中各參數含義參照表1。
表1 列舉了3 種不同的修約公式是對固定數值的修約過程與結果,從結果不難判斷,ROUND 函數僅能實現對固定值按照四舍五入修約規(guī)則進行修約,而以上兩種修約方法能夠實現對固定值按照“奇進偶不進”修約規(guī)則進行修約。
表1 三種修約公式對修約規(guī)則實現示例
儀器準確度等級的判定需要對被檢儀器的多項性能指標做出綜合性判斷才能得出。各項指標是通過原始記錄中的數值按照規(guī)程給出的計算公式計算得出中間值,再對中間值進行相應的修約,最終才能得到用于判定級別的最終運算結果。
2.2.1 現象描述
以酸度計檢定項目“電計輸入阻抗引起的示值誤差和近似等效阻抗”[15]項目為例:使用酸度計檢定儀(標準信號發(fā)生器)向被檢酸度計發(fā)送pH 13.000 的信號,酸度計在串聯3×109Ω 電阻前后,pH 示值分別為13.00 和13.03,ΔpHR為0.015,按照“四舍五入”的修約規(guī)則將ΔpHR修約至小數點后2 位,pH 結果應為0.02,而用方法一和方法二進行修約實際得到的pH 結果均為0.01,軟件修約結果明顯發(fā)生了錯誤;而使用酸度計檢定儀向被檢酸度計發(fā)送pH 1.000 的信號,酸度計在串聯3×109Ω電阻前后,pH 示值分別為1.00 和1.01,ΔpH'R為0.005,按照“奇進偶不進”的修約規(guī)則將ΔpH'R修約至小數點后2 位,結果應為0.00,用方法一、方法二分別對ΔpH'R進行修約得到的結果亦為0.00,軟件修約結果與人工計算結果又保持了一致,如表2所示。綜上,采用方法一和方法二對兩個采用相同計算公式產生的中間值進行修約時,卻出現了兩種不同的結果。
表2 在酸度計電計輸入阻抗引起的示值誤差中由于浮點運算造成修約結果錯誤的示例
2.2.2 原因分析
計算機采用浮點運算進行數據處理,采用二進制對數據及運算結果進行存儲。在使用Excel 軟件對十進制數據運算時,計算機需要將每一個十進制數值轉化成二進制字符存儲,然后對存儲值進行運算,運算完成后再將存儲的二進制結果轉化成十進制結果進行顯示,數據轉換存儲過程中有可能造成極其微小的折損,從而造成最終的修約結果錯誤(見表2)。
利用如下試驗證實以上推論:用計算顯示(存儲) 值(ΔpHR、ΔpH’R) 與 實 際 值(0.015、0.005)作減法運算,驗證計算顯示值(即存儲值)與實際值是否一致,示例如表3。從表3 中不難看出,ΔpH’R的存儲值與實際值0.005 差值為0,說明兩者是一致的。而ΔpHR的存儲值與實際值0.015 差值為-3.19189×10-16。這證明了被修約數ΔpHR存儲值與顯示值存在痕量的偏差。
表3 計算機軟件的顯示值與實際值存在的微小偏差示例圖
綜上,浮點運算造成的痕量偏差具有一定的隨機性,并不總是存在的。這種偏差對于粗略的運算影響不大,但在精密的計量數據處理過程中,會對后續(xù)數據處理過程產生疊加影響,從而導致了整體結果的偏離,最終致使儀器判定級別出現錯誤。
針對2.2 中所提到的問題,可以根據其特點,化不確定問題為確定問題。假設痕量偏差一定存在,以此為前提,在被修約的中間值中增加修正值,把單點判斷變?yōu)榉秶袛?,從而將浮點運算造成的痕量偏差消除。仍以2.2 中所舉示例為例:按照2.1“方法一”中的描述,對單元格“ΔpHR”存儲數據進行修約(“四舍六入,逢五取偶”規(guī)則)時,需要考慮到痕量偏差造成的兩方面影響:一方面是對Round函數修約的影響,另一方面是對Mod 函數邏輯判斷的影響。針對前者,可假設單元格“ΔpHR”中存儲的計算顯示值一定存在痕量偏差,在采用Round 函數進行修約之前,對單元格“ΔpHR”存儲值加上已知微小數(例如0.000 001),以確?!八纳嵛迦搿毙藜s規(guī)則的實現;針對后者,可對單元格“ΔpHR”存儲值求余運算結果與預期結果進行差值運算,如果存儲值無限接近預期值,則二者差值應接近于0,可以預判其必定小于一個既定值(例如0.01),以此將單點邏輯判斷變?yōu)榉秶袛?,從而消除痕量偏差造成的影響。具體過程如表4 所示。
表4 改進前后的修約公式輸出結果對比圖
通過表4 中改進前后的修約結果對比不難判斷,修約公式在改進前,受到浮點運算造成的痕量偏差的影響,其輸出值有對有錯,也就是說其修約結果的可信度很差,如果以此作為儀器級別判定的標準,可能會產生錯誤結果。而通過改進修約公式,其結果的正確性得到了保證,證明上述改進方案是可行的。
用計算機做數據處理時,計算機的浮點運算及二進制存儲過程會對計算結果產生微小影響,這種影響具有一定的不確定性并且會累積,通常情況下,不會對復雜的中間運算結果修約造成干擾,但在一些特殊情況中,會導致數據修約結果錯誤,從而對一些特殊行業(yè)產生較大的影響。通過用范圍判斷取代單點判斷的方法可以消除這種影響,較好的規(guī)避數據浮點運算及二進制存儲對修約過程造成的干擾,從而保證修約結果的準確。由于數據處理具有復雜性,文中所給方法并不能解決所有計算機浮點運算造成的干擾,遇到具體問題仍需要對癥下藥,給出合適的預判方案以規(guī)避風險,期望越來越多的實用技巧被計量相關從業(yè)人員開發(fā)并推廣。另外,根據GB/T 8170—2008 規(guī)定,按照修約間隔不同,還可分為0.1 間隔修約、0.2 間隔修約、0.5 間隔修約[16-17]。在具體的數據修約過程中,還要結合不同的修約間隔對數據作出精細化的分析。數據處理作為檢測能力的一種具體體現,其與信息化技術相結合是提高檢測能力的有效途徑。對數據自動化處理中隱藏的問題進行深入挖掘分析,有助于提高計量檢測精度,規(guī)避行業(yè)潛在風險,具有十分重要的現實意義。