曹郁輝,胡昌龍
(十堰職業(yè)技術(shù)學(xué)院黨委工作部,湖北十堰442000)
J2ME是Java2的一個(gè)組成部分。相對(duì)于J2SE、J2EE來(lái)說(shuō),J2ME應(yīng)用的范圍是運(yùn)算功能有限、電力有限、存貯器大小也有限的嵌入式裝置。在J2ME中使用的函數(shù)是Jave2標(biāo)準(zhǔn)函數(shù)的子集。也就是說(shuō)有一些J2SE、J2EE能夠使用的函數(shù),在J2ME中沒(méi)有。這在幾年前還不算一個(gè)問(wèn)題。因?yàn)閹啄昵暗那度胧窖b置功能很有限,無(wú)需太多的函數(shù)支持。隨著信息技術(shù)的發(fā)展,目前這一情況已經(jīng)發(fā)生了很大的變化。比如說(shuō)同樣是手機(jī)程序,過(guò)去由于手機(jī)屏幕很小,運(yùn)算速度很慢,運(yùn)行的程序都很簡(jiǎn)單。一些手機(jī)上的計(jì)算器程序只能完成簡(jiǎn)單的四則運(yùn)算,運(yùn)行的小游戲也很粗糙。而現(xiàn)在手機(jī)處理器的速度已經(jīng)超過(guò)了老式的個(gè)人計(jì)算機(jī),很多人對(duì)手機(jī)的使用也不僅僅是打電話,而是把它當(dāng)成了比筆記本、便于攜帶的小電腦,通訊、上網(wǎng)、辦公、娛樂(lè),這些功能成了現(xiàn)在手機(jī)流行的附加功能。而為手機(jī)設(shè)計(jì)程序時(shí),J2ME原有的函數(shù)庫(kù)也暴露出了它的不足。下面我們就J2ME數(shù)學(xué)函數(shù)的完善進(jìn)行討論。
J2ME數(shù)學(xué)函數(shù)在J2ME的java.lang包中的Math類中,和C語(yǔ)言的標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)以及J2SE當(dāng)中的數(shù)學(xué)函數(shù)相比,少了求冪函數(shù)、對(duì)數(shù)函數(shù)、反三角函數(shù)和雙曲函數(shù)。這些函數(shù)過(guò)去在J2ME中用處不大,因?yàn)樵缙诘那度胧皆O(shè)備處理速度慢,對(duì)于數(shù)學(xué)方面的計(jì)算要求少,即使有這方面計(jì)算的要求,精度要求也不高,往往用查表法來(lái)實(shí)現(xiàn)[1]。而隨著芯片技術(shù)的發(fā)展,嵌入式設(shè)備處理能力已經(jīng)變得足夠強(qiáng)大了,相應(yīng)的數(shù)學(xué)計(jì)算能力的要求也提高了。例如現(xiàn)在一些手機(jī)的工具軟件就要求有比較強(qiáng)大的計(jì)算能力,比如常用的手機(jī)的科學(xué)計(jì)算器軟件要求能夠高精度地完成這些數(shù)學(xué)運(yùn)算,并能作為一些技術(shù)人員的高級(jí)工具來(lái)使用。因此我們有必要把J2ME中的數(shù)學(xué)函數(shù)加以完善,以滿足編程的需要。
由于數(shù)學(xué)函數(shù)之間能夠通過(guò)公式相互聯(lián)系,因此只要編寫(xiě)出幾個(gè)關(guān)鍵的函數(shù),其他一些函數(shù)的編程就會(huì)變得很容易了。下面我們先來(lái)看一下這些函數(shù)之間的關(guān)系:
冪函數(shù)與對(duì)數(shù)函數(shù)的關(guān)系為:yx=exlny
反三角函數(shù)之間的關(guān)系是:
雙曲函數(shù):
通過(guò)以上公式可以看出,只要先編寫(xiě)出三個(gè)函數(shù)的程序:f(x)=ex、f(x)=lnx、f(x)=arctanx其他函數(shù)的程序就可以很容易編寫(xiě)出來(lái)了。下面我們就來(lái)看一下這幾個(gè)函數(shù)的編程。
自然對(duì)數(shù)可利用麥克勞林展開(kāi)式計(jì)算:
其中Rn(x)是拉格朗日余項(xiàng),只有在x≤1時(shí),該余項(xiàng)才收斂。我們根據(jù)對(duì)數(shù)的運(yùn)算公式,編寫(xiě)出的函數(shù)如下:
該程序通過(guò)TiOAMP850處理器的智能手機(jī)和mtk6235平臺(tái)的非智能手機(jī)驗(yàn)證,在一般情況下誤差小于10-15,在極端情況下誤差小于10-12,完全滿足專業(yè)的運(yùn)算要求。并且程序簡(jiǎn)單,遞歸的層次少,運(yùn)算速度很快。
由于該級(jí)數(shù)在接近-1和1的地方收斂很慢,因此有很多改進(jìn)的快速算法。這里,我們選用一種曲線擬合,分段計(jì)算的方法。該程序如下:
該程序同樣通過(guò)TiOAMP850處理器的智能手機(jī)和mtk6235平臺(tái)的非智能手機(jī)驗(yàn)證,運(yùn)算誤差小于10-20。該程序同樣具有程序簡(jiǎn)單,精度高,運(yùn)算速度快的特點(diǎn)。
有了以上幾個(gè)程序,剩余的反三角函數(shù)、雙曲函數(shù)、求冪函數(shù)的編程就比較簡(jiǎn)單了。我們只需按照函數(shù)關(guān)系公式編寫(xiě)程序就行了。由于本文中給出的幾個(gè)函數(shù)運(yùn)算的速度和精度都很高,因此衍生出來(lái)的其余的函數(shù)的運(yùn)算速度和精度同樣能夠滿足要求。
隨著通信技術(shù)的發(fā)展,J2ME廣泛應(yīng)用于手機(jī)程序的開(kāi)發(fā)。由于目前手機(jī)硬件日益強(qiáng)大,所需的程序要求也相應(yīng)提高。比如一些技術(shù)人員將手機(jī)當(dāng)作運(yùn)算工具來(lái)完成施工現(xiàn)場(chǎng)的工作。還有一些手機(jī)游戲,由于手機(jī)顯示畫(huà)面日趨精細(xì),早期的數(shù)學(xué)函數(shù)已經(jīng)難以滿足計(jì)算需要。還有像衛(wèi)星接收機(jī)、數(shù)字電視接收機(jī)等嵌入式設(shè)備,由于對(duì)聲音、圖像的壓縮和解壓縮的需要,也要求能夠有高精度的數(shù)學(xué)函數(shù)來(lái)滿足編程的需要。因此我們補(bǔ)充的數(shù)學(xué)函數(shù)正好可以滿足以上的要求,具有很高的實(shí)用性。
[1]Kim Topley.J2ME技術(shù)手冊(cè)[M].北京:中國(guó)電力出版社,2004:400.
湖北工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào)2011年6期