我需要使用GMPs mpf_t/mpz_t作爲散列表中的鍵。 是否有任何有效的方式來訪問數字表示的原始字節,所以我可以在他們上運行一個哈希函數?使用GMP類型(mpf_t/mpz_t)作爲散列表中的鍵
我已經閱讀了文檔,但我現在並不覺得更聰明。 ;)
謝謝! Regards, Ethon
我需要使用GMPs mpf_t/mpz_t作爲散列表中的鍵。 是否有任何有效的方式來訪問數字表示的原始字節,所以我可以在他們上運行一個哈希函數?使用GMP類型(mpf_t/mpz_t)作爲散列表中的鍵
我已經閱讀了文檔,但我現在並不覺得更聰明。 ;)
謝謝! Regards, Ethon
出於好奇,爲什麼使用哈希時,你可以按值排序?比較非常快,因爲它比較了從MSB到LSB的字節/分支,只要它們不同,就會返回結果。
您可以使用平臺相關的mp_limb_t
類型訪問原始數據。 mpz_t
和mpf_t
都有一個mp_limb_t
矢量存儲在_mp_d
指定的地址,其中有效肢體的數量由_mp_size
字段的絕對值給出。 (定義在gmp.h
)
當然,如果散列函數依賴於一個8位字節向量,您將需要轉換肢體向量。幸運的是,在任何理智的平臺上,總是可以被8整除。
通常只有'GMP_NUMB_BITS'位與每個肢體有關,並且可能很容易有許多釘子不是8的倍數。但是,這些天釘子沒有使用,所以當前沒有關係。 –
這樣做目前尚不支持。有計劃可能會添加一個記錄的API來訪問未來版本中的原始表示。同時,閱讀源代碼可以提供幫助(有評論!)。 –