第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

表示C ++中的128位數(shù)字

表示C ++中的128位數(shù)字

FFIVE 2019-10-10 17:01:11
用C ++表示128位數(shù)字的最佳方法是什么?它的行為應盡可能接近于內置數(shù)字類型(即支持所有算術運算符等)。我當時正在考慮建立一個具有2 64位或4 32位數(shù)字的類。或者可能只是創(chuàng)建一個128位的內存塊,然后自己做所有事情。是否有一些更簡單/更標準的方法,或者我自己實施時不太可能搞砸的方法?:)如果可以擴展到256位,512位等,那也很好。
查看完整描述

3 回答

?
呼如林

TA貢獻1798條經(jīng)驗 獲得超3個贊

查看其他已開發(fā)的庫。很多人都想在您之前這樣做。:D


嘗試bigint C ++


查看完整回答
反對 回復 2019-10-10
?
翻過高山走不出你

TA貢獻1875條經(jīng)驗 獲得超3個贊

這在某種程度上是一種特殊情況,特別是因為您沒有指定要查找的平臺,但是在GCC中,您可以使用所謂的mode(TI)來獲取(綜合)128位操作,實例:


   typedef unsigned int uint128_t __attribute__((mode(TI)));


   uint64_t x = 0xABCDEF01234568;

   uint64_t y = ~x;


   uint128_t result = ((uint128_t) x * y);


   printf("%016llX * %016llX -> ", x, y);


   uint64_t r1 = (result >> 64);

   uint64_t r2 = result;


   printf("%016llX %016llX\n", r1, r2);

不過,這僅適用于64位處理器。


一種或另一種方式,您正在尋找多重精度算法來解決此問題。mode(TI)將使編譯器為您生成操作,否則必須顯式編寫它們。


您可以使用通用的bigint包;我知道的C ++中包括數(shù)字理論軟件包LiDIA和NTL,以及用于Crypto ++和Botan中的加密代碼的bigint軟件包)。加上當然還有GnuMP,它是規(guī)范的C MPI庫(它也具有C ++包裝器,盡管上次查看時似乎文獻記載很少)。所有這些設計的速度都很快,但也可能針對更大的數(shù)字(1000+位)進行了調整,因此在128位時,您可能要處理很多開銷。(另一方面,您不會說這是否重要)。而且所有這些(與bigint-cpp軟件包(即GPL一樣,不是BSD還是LGPL))-不確定是否重要-但這可能很重要。


您也可以編寫一個自定義的uint128_t類型的類型。通常,這種類將實現(xiàn)與常規(guī)MPI類幾乎相同的算法,只是將其硬編碼為僅包含2個或4個元素。如果您對如何實現(xiàn)這種算法感到好奇,可以參考《應用密碼學手冊》第14章。


當然,如果您實際上不需要所有的算術運算(尤其是除法和模運算,則相當棘手),則手動進行操作會更容易。例如,如果您只需要跟蹤一個假設可能溢出64位的計數(shù)器,則可以將其表示為一對64位長的long,然后手動進行進位:


unsigned long long ctrs[2] = { 0 };


void increment() {

   ++ctrs[0];

   if(!ctrs[0]) // overflow

     ++ctrs[1];

}

當然,與一般的MPI包或自定義的uint128_t類相比,處理哪個當然要簡單得多。


查看完整回答
反對 回復 2019-10-10
  • 3 回答
  • 0 關注
  • 1067 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號