高精度計算48916_第1頁
已閱讀1頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、高精度運算所謂的高精度運算是指參與運算的數(加數減數因子……)范圍大大超出了標準數據類型(整型,實型)能表示的范圍的運算。例如,求兩個200位的數的和。這時,就要用到高精度算法了。在這里,我們先討論高精度加法。高精度運算主要解決以下三個問題:一、加數、減數、運算結果的輸入和存儲運算因子超出了整型、實型能表示的范圍,肯定不能直接用一個數的形式來表示。在Pal中,能表示多個數的數據類型有兩種:數組和字符串。數組:每個數組元素存儲1位(在優(yōu)化

2、時,這里是一個重點!),有多少位就需要多少個數組元素;用數組表示數的優(yōu)點:每一位都是數的形式,可以直接加減;運算時非常方便。用數組表示數的缺點:數組不能直接輸入;輸入時每兩位數之間必須有分隔符,不符合數值的輸入習慣;字符串:字符串的最大長度是255,可以表示255位。用字符串表示數的優(yōu)點:能直接輸入輸出,輸入時,每兩位數之間不必分隔符,符合數值的輸入習慣;用字符串表示數的缺點:字符串中的每一位是一個字符,不能直接進行運算,必須先將它轉化

3、為數值再進行運算;運算時非常不方便;綜合以上所述,對上面兩種數據結構取長補短:用字符串讀入數據,用數組存儲數據:vars1s2:stringabc:array[1..260]ofintegerilk1k2:integerbeginwrite(inputs1:)readln(s1)write(inputs2:)readln(s2)————讀入兩個數s1,s2,都是字符串類型l:=length(s1)求出s1的長度,也即s1的位數;有關字符

4、串的知識。k1:=260fi:=ldownto1dobegina[k1]:=d(s1[i])48將字符轉成數值k1:=k11endk1:=k11————以上將s1中的字符一位一位地轉成數值并存在數組a中;低位在后(從第260位開始),高位在前(每存完一位,k1減1),完后,k1指向最高位對s2的轉化過程和上面一模一樣。二、運算過程在往下看之前,大家先列豎式計算3586。注意的問題:(1)運算順序:兩個數靠右對齊;從低位向高位運算;先計算

5、低位再計算高位;(2)運算規(guī)則:同一位的兩個數相加再加上從低位來的進位,成為該位的和;這個和去掉向高位的進位就成為該位的值;如上例:381=12,向前一位進1,本位的值是2;可借助MOD、DIV運算完成這一步;(3)最后一位的進位:如果完成兩個數的相加后,進位位值不為0,則應添加一位;y:=xdiv10endify0thenbegink:=k1c[k]:=yendfi:=kto260dowrite(c[i])writelnend.四、優(yōu)

6、化:以上的方法的有明顯的缺點:(1)浪費空間:一個整型變量(32768~32767)只存放一位(0~9);(2)浪費時間:一次加減只處理一位;針對以上問題,我們做如下優(yōu)化:一個數組元素存放四位數;(integer的最大范圍是32767,5位的話可能導致出界)。具體方法:l:=length(s1)k1:=260repeat————有關字符串的知識s:=copy(s1l34)val(sa[k1]code)k1:=k11s1:=copy(s1

7、1l4)l:=l4untill=0k1:=k11而因為這個改進,算法要相應改變:(1)運算時:不再逢十進位,而是逢萬進位(mod10000div10000)(2)輸出時:最高位直接輸出,其余各位,要判斷是否足夠4位,不足部分要補0;例如:1,23,2345這樣三段的數,輸出時,應該是100232345而不是1234567。改進后的算法:programsumvars1s2s:stringabc:array[1..260]ofinteger

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論