- 編寫高質量代碼:改善C程序代碼的125個建議
- 馬偉 著
- 387字
- 2019-01-01 01:33:16
建議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; }
通過上面的闡述,相信大家對如何減少使用除法與模運算有了初步了解。下面將詳細討論如何優化除法運算與求模運算。
推薦閱讀
- JavaScript前端開發模塊化教程
- 零基礎搭建量化投資系統:以Python為工具
- DevOps with Kubernetes
- Learning Cython Programming(Second Edition)
- Delphi程序設計基礎:教程、實驗、習題
- 軟件項目管理(第2版)
- Objective-C應用開發全程實錄
- Developing Middleware in Java EE 8
- FreeSWITCH 1.6 Cookbook
- Oracle BAM 11gR1 Handbook
- 軟件測試技術指南
- Learning Vaadin 7(Second Edition)
- 超簡單:Photoshop+JavaScript+Python智能修圖與圖像自動化處理
- MySQL數據庫應用實戰教程(慕課版)
- 零基礎C語言學習筆記