一種基于模板元編程的量綱檢測(cè)方法
量綱檢測(cè)系統(tǒng)應(yīng)該預(yù)定義常用單位量綱,以方便應(yīng)用開(kāi)發(fā)人員使用。TADA方法采用如下方式定義單位量綱:本文引用地址:http://www.biyoush.com/article/195807.htm
2.5 數(shù)學(xué)運(yùn)算函數(shù)的量綱包裝
對(duì)于指數(shù)、對(duì)數(shù)、三角函數(shù)等已有的數(shù)學(xué)運(yùn)算函數(shù),其參數(shù)與返回值都是沒(méi)有單位量綱的,不能直接用于有量綱的公式計(jì)算。針對(duì)這個(gè)問(wèn)題,.TADA方法提供了這些函數(shù)的量綱包裝,以sqrt和sin為例如下:
2.6 輔助工具
TADA方法還提供了一些輔助工具,用于將量綱變量以適合閱讀的方式顯示出來(lái),例如:
可以得到這樣的輸出結(jié)果:0.2米/秒2
2.7 分析和評(píng)估
在TADA方法的基礎(chǔ)上,實(shí)現(xiàn)了面向C/C++程序的量綱檢測(cè)系統(tǒng)(TADA系統(tǒng)),并對(duì)TADA系統(tǒng)的檢測(cè)能力進(jìn)行了分析和評(píng)估。
首先采用TADA系統(tǒng)來(lái)檢測(cè)下面的樣例程序。
在TADA系統(tǒng)中,Visual Studio 2003編譯該程序會(huì)出現(xiàn)類(lèi)似如下的錯(cuò)誤信息,錯(cuò)誤信息的第3行就表明了unit.epp的第9行有錯(cuò)誤。
在檢測(cè)能力方面,采用文獻(xiàn)的樣例程序?qū)A-DA系統(tǒng)和Osprey系統(tǒng)的量綱檢測(cè)能力進(jìn)行了對(duì)比評(píng)估。在文獻(xiàn)中,Osprey共找到了3個(gè)錯(cuò)誤,其中前2個(gè)是單位誤用錯(cuò)誤,第3個(gè)是單位轉(zhuǎn)換比例因子錯(cuò)誤。TADA系統(tǒng)也完全找到了前2個(gè)錯(cuò)誤,而第3個(gè)錯(cuò)誤在標(biāo)注時(shí)被避免掉了,因?yàn)樵搯挝幌到y(tǒng)包含了量綱之間的比例因子,能夠進(jìn)行自動(dòng)的單位轉(zhuǎn)換。
在性能和可擴(kuò)展性方面,TADA系統(tǒng)能夠更有效地實(shí)現(xiàn)對(duì)c/c++程序的量綱檢測(cè)。Osprey系統(tǒng)引入了具有較高計(jì)算復(fù)雜度的線(xiàn)性方程組求解步驟,需要很大的計(jì)算和時(shí)間開(kāi)銷(xiāo)來(lái)解線(xiàn)性解方程組。TADA系統(tǒng)基于模板元編程技術(shù),只需要利用語(yǔ)言自身的語(yǔ)法能力,靠編譯器進(jìn)行單位量綱檢查,沒(méi)有帶來(lái)太多額外的復(fù)雜計(jì)算。并且TADA系統(tǒng)不會(huì)帶來(lái)任何程序的運(yùn)行時(shí)開(kāi)銷(xiāo)。因此TADA系統(tǒng)可適用于各種規(guī)模的C/C++程序,具有更好的性能和可擴(kuò)展性。
在易用性方面,TADA系統(tǒng)的標(biāo)注負(fù)擔(dān)與Osprey系統(tǒng)相當(dāng)。由于TADA系統(tǒng)利用C++編譯器的功能進(jìn)行錯(cuò)誤檢測(cè),而C++編譯器遇到模板錯(cuò)誤時(shí)的錯(cuò)誤信息卻不很直觀(guān),錯(cuò)誤報(bào)告的可讀性較弱,但仍可以快速定位到錯(cuò)誤點(diǎn)。
3 結(jié) 語(yǔ)
這里提出一種新穎的基于模板元編程的單位量綱檢測(cè)方法TADA,并基于該方法實(shí)現(xiàn)了一個(gè)單位量綱檢測(cè)系統(tǒng)。
TADA方法采用模板元編程技術(shù),使得經(jīng)過(guò)單位量綱標(biāo)注的受測(cè)程序仍然是一個(gè)完整、合法、可編譯的C/C++程序,無(wú)需維護(hù)多套程序代碼,也無(wú)需進(jìn)行復(fù)雜的解方程組運(yùn)算,就能夠在程序代碼中發(fā)現(xiàn)量綱錯(cuò)誤,具有良好的實(shí)用性和可擴(kuò)展性,可以有效適用于多種規(guī)模程序的量綱檢測(cè)。
評(píng)論