大數除法,用相減的思路,如果兩個數差距很大,會很慢,能否加以改進?

時間 2021-06-05 13:15:18

1樓:海鵬

此時需要參考高德納大神在TAOCP卷2中介紹的任意精度整數除法演算法

經過我的測試,實現128位整數除法,x86_64平台下此演算法接近於直接使用udiv硬體指令

pdf到處都是,如果不想自己寫的話,可以直接使用boost.multiprecision庫

2樓:郭忠明

演算法1是:用簡單的加減法+移位,可以實現除法:

演算法1:

unsigned int uint_div( const unsigned int uint_number_in, const unsigned int uint_denom_in )

演算法3:這個主要是演算法1的改進,不需要intel cpu 的特殊指令_bit_scan_reverse, 適應範圍更廣,但是也更慢一點.

unsigned int uint_div( const unsigned int uint_number_in, const unsigned int uint_denom_in )

總之,除法的演算法很多

3樓:朱涵俊

1、用long來計算會快點吧?

2、可以用位執行來縮小差距。舉例來說,95/30=(32*95/32+95%32)/30=((30+2)*(95/32)+95%32)/30=(95/32)+2*(95/32)/30+95%32/30

95/32用位運算就好了。經過一次位運算,就都是小數字運算了。

3、可以用unsinged int 或者unsigned long陣列來表示大資料,實際上就是以2的32次方或者2的64次方作為進製來表示資料。比如11就是表示2^32+1,對應資料結構就是unsigned int n[2]; n[0]=1,n[1]=1;

同樣可以先計算除數的4G的n次方。比如乙個大數=表示0+2^32+2^64*2+3*2^96,可以先除以,即先除以2^128次方。

x=2^128*(x/2^128)+x%2^128

x/2^128次方很好算,x%2^128次方也很好算,比如x=,分別為,,分別記為M,N

那麼x/y=(2^128*M+N)/y=((y+2^128-y)*M+N)/y=(1+(2^128-y)/y)*M+N/y

如果x很大的話,進過這樣一次迭代,就變成跟y很近的數字計算了。

上面的(2^128-y)/y只要整數部分,除數丟棄即可。

當下大資料市場的火熱,和做大資料開發的人如洪水猛獸般湧進來,大資料工程師的核心競爭力是什麼

IT人劉俊明 作為一名科技 教育工作者,我來說說我的看法。首先,隨著大資料技術體系的不斷成熟和發展,在工業網際網路的推動下,大資料技術已經處在了落地應用的初期階段,相信隨著越來越多的行業資源和社會資源向網際網路匯集,大資料自身將構建起乙個龐大的價值空間,這必然會釋放出大量的人才需求。當前大資料領域的...

大資料專業用的電腦推薦?

大資料流動 看了你的課程,除了人工智慧,其他的不需要用到效能高的GPU。而正常跑GPU運算也是在大型台式電腦或者伺服器上跑的,學校會提供相關環境的,不用著急。至於大資料專業,肯定要進行虛擬機器的搭建,AMD與Intel處理器比起來還是intel對虛擬化的支援好一些,還是建議優先選intel處理器的。...

英雄聯盟中教練的BP思路是什麼?在排位中如何根據對面的陣容體系選擇正確克制的BP?

人間大全 大約就是見招拆招,像打poke選強開,英雄技能的克制關係也很重要,像布隆的盾能擋住奧恩的羊,在乙個就是英雄組合,像卡牌加卡密爾,卡密爾加加里奧,貓咪加ez 一行一度 比賽BP是以阻止對方團戰陣容成型為核心,這個成型重點在發力時間和控制鏈。完全不會出現點對點的選or禁 至於普通排位,這裡給一...