前段時間對乙個多精度計算的大數類維護已經過一段落,
現對此做個總結,以備遺忘.
初步定為大約有 資料結構,,乘法,除法,倒數,平方,有理數冪等,可能到時會略有更改.
資料結構篇:
根據需要,可採用的2次冪進製(比如2^32,2^31,2^30,2^28,2^16等等),採用10次冪進製(10^9,10^4,10^1等等),, 對這些進製各有優劣.
採用二進位制本身計算相對簡便,但是由於人習慣於 10進製顯示的,這進製間還需要有個轉換過程,而這個轉換過程相對還比較複雜,對有顯示需求的,採用二進位制並不是非常合適.
採用十進位制則相反,計算相對繁複一些,但是顯示直觀.
通常如果有顯示需求,採用10進製比較合適,否則二進位制更方便優化.
至於對二(十)進製體系內部的不同的進製選取,如(2^32,2^31,2^30,10^9,10^4,10等等),通常這些不同的選取是基於優化對資料運算時溢位處理的考慮.這裡對此不再展開
當然,還存在其他進製,比如7進製,36進製,這些特殊的進製通常是作為特殊用途的,通常的多精度計算並不會選擇這些相對特殊進製.
class hugeint
這表示法有點類似於科學計算法,符號位,指數,真實資料,
指數實際和小數點實際位置相關.
這裡採用的是陣列的資料結構來儲存真實資料,通常根據實際需要陣列長度需可調整,
直接看成 typedef std::vectordata;這也無妨礙理解.
這裡還有個取捨問題,就是這個指數是否需要使用,有這個指數,資料的末端0則可以直接被處理掉.但是在其他運算時,這個指數有個額外的偏移量計算.稍稍增加計算量.
具體實現時,可以根據需要選取是否使用這個指數,
這裡具體的實現是採用10^9進製,並沒有採用指數這個引數.
資料結構,大致到這裡.
由於多精度加法,減法,基本上實現都是相同的,沒有什麼特別的優化手段,不再對多精度的加法,減法進行討論.
後面對會對多精度運算裡,相當重要的乘法展開討論
資料結構學習備忘錄(持續更新)
概念性問題 在鍊錶中引入頭結點可以使頭指標永遠不空。方便插入和刪除運算的實現。線性表採用鏈式儲存時,結點和結點內部的儲存空間必須是連續的。有價值的 高效刪除順序表中值為e的所有元素的 void del sqlist l,elemtype e l length l length k 修改表的長度 對於...
sqlite3命令備忘錄之檢視表結構
android內建了sqlite資料庫,程式開發中經常使用到,已安裝的程式,如何通過adb檢視以建立的表結構呢?在android下通過adb shell命令可以進入sqlite3的命令列client,見 在android命令列下使用sqlite3 如果想列出該資料庫中的所有表,可 table 如果想...
資料結構之逆波蘭計算器
逆波蘭計算器也稱為字尾計算器,逆波蘭表示式形如 30 4 5 6 其對應的中綴表示式為 30 4 5 6 這次我利用棧結構實現乙個逆波蘭表示式的簡單版計算器。先說說實現思路 先將表示式轉化成list集合 順序遍歷集合,如果當前元素是數字,壓入棧中 如果當前元素是操作符,彈出棧中的兩個元素進行計算,並...