跳转到内容

模組:BigNumber/doc

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由A2569875留言 | 贡献2022年9月27日 (二) 08:01 撤销A2569875讨论)的版本73839516)编辑。这可能和当前版本存在着巨大的差异。

这是Module:BigNumber的文档页面

以百萬進制運作的大數運算系統(或稱高精度计算)。當中也包含了大數運算進制轉換系統。目前支援加法、減法、乘法、除法與整數冪次

使用方法

Lua

.bigint("bignumber", base)
以一個指定底數的字串初始化一個大數。底數預設值為10。
參數:
  • bignumber(大數):要初始化的大數。若未輸入則默認為0。
  • base(輸入的底數):輸入值的進位制,默認為10。
例如:
local bigint = require('Module:BigNumber')
print(bigint.bigint("425731578351266") * bigint.bigint("948700000017358"))
輸出:403891548389235902937021275228
.convertBase("number", base, from, width, precision, sub)
將特定進位制的數字轉成以另一個進位制表示。在本模組中用於大數輸入輸出。
參數:
  • number(數字):(必填)須轉換的數字,以字符串形式輸入。十進制的數字可直接以數字形式輸入。
  • base(目標底數):(必填)目標進位制,可取任意大於1(含)的正實數和小於-1(不含)的負整數接受非整數的底數,如,但不接受負的非整數的底數
  • from(原始底數):輸入值的進位制,默認為10(如果輸入值以「0x」開頭,則默認為16)。
  • width(位數補齊):小數點前至少顯示的位數,達不到時會加「0」。
  • precision(小數計算最大位數):小數點後的位數,達不到時會加「0」。不填該項會顯示所有位數,但不超過20位數。
  • sub(輸出模式):見Template:進制/doc#sub的值
  • prefix:加在輸出值前的維基代碼。n為空時則不加。例如在轉換到十六進制後在前面加上0x
  • suffix:加在輸出值後的維基代碼。n為空時則不加。例如在轉換到八進制後在後面加上<sub>8</sub>
例如:
local bigint = require('Module:BigNumber')
print(bigint.convertBase({n = 3.14159265358979, base = 3}))
輸出:10.010211012222010(OEIS數列A004602
._FFT(實部陣列, 虛部陣列, 長度, 是否為逆變換)
執行快速傅里叶变换。在本模組中用於大數乘法。
參數:

模板

搭配{{計算}}使用

{{計算| 2^64 | number class=Module:BigNumber.bigintmath}}
→18446744073709551616
對比{{計算| 2^64 }}→1.844674407371e+19
以及{{#expr:2^64 }}→1.844674407371E+19
{{計算| 425731578351266 * 948700000017358 | number class=Module:BigNumber.bigintmath}}
→403891548389235902937021275228
對比{{計算| 425731578351266 * 948700000017358 }}→4.0389154838924e+29
以及{{#expr:425731578351266 * 948700000017358 }}→4.0389154838924E+29
{{計算| factorial(70) | number class=Module:BigNumber.bigintmath}}
→11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000
對比{{計算| factorial(70) }}→1.197857166997e+100

注意事項

雖然大數運算系統(或稱高精度计算)理論上無計算上的上限,但考慮到維基百科伺服器有限制腳本運作時間為10秒(見WP:模板限制)因此也不能運算過大的數;此外冪次的運算是使用傳統一次一次相乘,因此過大的指數也可能導致超過模板運算上限。雖然目前乘法演算法已使用傅里叶变换進行加速,但使用此模組時仍應留意效能。

此外,本模組主要是設計給整數的大數運算(Big Integer),但有保留小數運算的能力,尤其是運算除法不整除時,多次的除法會導致小數位數的增長,因而導致計算時間增加,因此若需要做多次除法建議取整,可使用number:setpoint(0).bigintmath.floor(number)(搭配{{計算}}時使用floor(number))來清除小數。