无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

無符號(hào)整型除法的快速算法

2020-05-31 18:13 作者:九條可憐醬  | 我要投稿

眾所周知,即使是現(xiàn)在最新的CPU整數(shù)除法指令依然是相當(dāng)慢的,在某些情況下耗時(shí)和幾十次位運(yùn)算差不多。而整數(shù)乘法指令則相當(dāng)快,耗時(shí)和兩三次位運(yùn)算相當(dāng)。

各種主流編譯器很早就明白了這個(gè)道理,它們會(huì)對(duì)除數(shù)為常量的整數(shù)除法進(jìn)行優(yōu)化,優(yōu)化成整數(shù)乘法和移位運(yùn)算。

下面我們來看一些編譯器優(yōu)化的例子。

GCC?-O2
C# JIT ASM

可以看到編譯器把x/5優(yōu)化成了(unsigned int)((x*3435973837ULL)>>34)。那么問題來了,編譯器都干了些什么,乘以3435973837和右移34是怎么算出來的?


下面我只說這2個(gè)數(shù)怎么算出來的,具體數(shù)學(xué)原理可以在文章末尾的鏈接參考某大佬的文章。

在32位無符號(hào)整型范圍內(nèi),將x/y變成(x*a)>>b等價(jià)形式,那么:

當(dāng)然,這么直接有缺點(diǎn)的,超出32位范圍了,如何繼續(xù)優(yōu)化參考大佬文章吧!



參考:http://ridiculousfish.com/blog/posts/labor-of-division-episode-i.html


無符號(hào)整型除法的快速算法的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
宁化县| 虹口区| 中阳县| 玉溪市| 吕梁市| 当涂县| 江油市| 宜城市| 台州市| 垣曲县| 黎平县| 临江市| 镇原县| 亚东县| 嘉祥县| 庐江县| 德清县| 湖州市| 顺昌县| 盐山县| 连城县| 青阳县| 金昌市| 金寨县| 桐柏县| 梅州市| 元朗区| 福泉市| 聂荣县| 浦北县| 靖州| 犍为县| 延寿县| 收藏| 喀什市| 隆昌县| 葵青区| 清水河县| 开原市| 偃师市| 张家港市|