官术网_书友最值得收藏!

建議12:盡量減少使用除法運算與求模運算

對計算機來說,除法與求模是整數算術運算中最復雜的運算。相對其他運算(如加法與減法)來說,這兩種算法的執行速度非常慢。例如,ARM硬件上不支持除法指令,編譯器調用C庫函數來實現除法運算。直接利用C庫函數中的標準整數除法程序要花費20~100個周期,消耗較多資源。

在非嵌入式領域,因為CPU運算速度快、存儲器容量大,所以執行除法運算和求模運算消耗的這些資源對計算機來說不算什么。但是在嵌入式領域,消耗大量資源帶來的影響不言而喻。因此,從理論上講,我們應該在程序表達式中盡量減少對除法運算與求模運算的使用,盡量使用其他方法來代替除法與求模運算。例如,對于下面的示例代碼:


if (x/y>z)
{
    // ...
}

我們可以將其修改成如下形式:


if (((y>0)&&(x>y*z))||((y<0)&&(x<y*z)))
{
    // ...
}

這樣就簡單地避免了一些除法運算。同時,也可以在表達式中通過合并除法的方式來減少除法運算,下面通過示例來講解。對于如下代碼:


double x=a/b/c;
double y=a/b+c/b;

根據數學結合原則,上面的代碼可以通過合并的方式減少代碼中的除法運算,修改后的代碼如下:


double x=a/(b*c);
double y=(a+c)/b;

同樣,對于求模運算,也可以采用相應的方法來代替,如下面的示例代碼:


a=a%8;
// 可以修改為:
a=a&7;

對于下面的表達式:


x=(x+y)%z;

可以通過如下方式來避免使用模操作符:


x+=y;
while(x>=z)
{
    x-=z;
}

通過上面的闡述,相信大家對如何減少使用除法與模運算有了初步了解。下面將詳細討論如何優化除法運算與求模運算。

主站蜘蛛池模板: 乾安县| 广汉市| 闽侯县| 广昌县| 玛曲县| 霞浦县| 普格县| 呼和浩特市| 冀州市| 淳安县| 永城市| 女性| 瑞金市| 昆明市| 和龙市| 翁牛特旗| 威信县| 静乐县| 秀山| 崇信县| 宜兰市| 丰顺县| 金华市| 隆化县| 乐山市| 巩留县| 依安县| 棋牌| 黎平县| 汉沽区| 江口县| 沾化县| 融水| 威海市| 哈尔滨市| 乌鲁木齐市| 望城县| 苏尼特右旗| 榆林市| 灵宝市| 牟定县|