假設我知道我的號碼可能有多少位(我想第一次分配適當的空間量,我如何計算需要分配的字節數?我想我總是可以設置值是1*10^(num digits)
再經過0
但感覺錯了,就像我擊敗目的要在mpz_t(MPIR)中分配多少空間?
編輯爲清楚:我想知道我需要多少字節來存儲與n
小數位數的整數,以及是否或者不是MPIRs的執行可能會影響到這一點。@JonathonLeffler在他的回答中提供了正確答案。
假設我知道我的號碼可能有多少位(我想第一次分配適當的空間量,我如何計算需要分配的字節數?我想我總是可以設置值是1*10^(num digits)
再經過0
但感覺錯了,就像我擊敗目的要在mpz_t(MPIR)中分配多少空間?
編輯爲清楚:我想知道我需要多少字節來存儲與n
小數位數的整數,以及是否或者不是MPIRs的執行可能會影響到這一點。@JonathonLeffler在他的回答中提供了正確答案。
由於有一個MPIR標籤,這大概是MPIR,一個GMP叉子。而當前文檔中(僅PDF - 無在線HTML),標題 '初始化整數' 下,你可以找到:
void mpz_init2(mpz_t integer, mp_bitcnt_t n)
初始化
integer
,與空間n
位,並設置其值爲0.n
只是初始空間,integer
會以正常的方式自動增長,必要時 會存儲後續值。mpz_init2
可以避免這種重新分配,如果預先知道最大大小。
如果這是爲GMP,你可以閱讀Initializing integers聯機手冊上找到:
- 功能:
void mpz_init2(mpz_t x, mp_bitcnt_t n)
初始化
x
,與空間n
位數字,並設置其值爲0.調用此函數而不是mpz_init
或mpz_inits
是不必要的;重新分配由GMP在需要時自動處理。雖然
n
定義了最初的空格,但是x
會以正常的方式自動增長,如果需要的話,對於後續存儲的值。mpz_init2
可以避免這種重新分配,如果預先知道最大大小。在準備手術時,GMP通常比最終需要分配更多的肢體。爲確保GMP不會執行
x
的重新分配,您需要將mp_limb_t中的位數添加到n
。
兩者基本相同。
這與[GMP](http://gmplib.org/)有關嗎? –
@JonathanLeffler問題標籤爲MPIR,這顯然是一個GMP叉(我必須查找它)。 –
我相信最好的問題是獨立的。標籤,甚至標題都是輔助信息。即使標籤和標題丟失,也應該回答問題。 –