我認爲一個好的用於科學計算的程序代碼應該:算法漂亮精妙,程序簡潔易懂,運算快速,節省內存。這裏有的地方是矛盾的,好比簡潔vs易懂,時間vs空間,找個平衡吧。目前來看時間要比空間寶貴一些。寫程序分幾步:選擇最妙的算法;規劃最優的流程;規劃數據結構、函數;編碼實現。html
1、算法優化算法
好的方法、算法是程序優化的根本,選擇最好的算法永遠是王道。數據結構
2、循環和判斷步驟優化函數
規劃流程時幾個不依賴於編譯器的tips:佈局
一、減小循環體內運算量:優化
(a)查表:提早列表,循環內查表。編碼
(b)提取循環的公共子式到循環外計算。設計
(c)將循環體展開以減小循環的判斷過程。指針
二、判斷式合理排列conditions減小判斷次數:htm
(a)根據發生頻率排列switch語句的case,或者if語句的條件式。
(b)將一些低機率條件合併及嵌套判斷。
(c)將多重條件嵌套判斷。
三、合理組織循環和判斷的嵌套
(a)將值不變的條件式放在循環的外面。
3、數據結構的設計優化
一、使用盡可能小的數據結構。如char好於int好於float。
二、使用便於運算的數據結構。
三、數據合理佈局
(a)結構體數據成員按類型長度排序。
(b)把結構體填充成最長類型長度的整數倍。
四、變量名短好於長。
五、同時聲明變量好於分別聲明變量
4、數據操做優化
一、使用指針。
二、儘可能使用常量。
三、經常使用變量設置爲寄存器變量。
四、初始化好於賦值。
五、減小文件讀取操做。
5、運算優化
C語言數據運算強度的優化,即便用快的運算代替慢的運算。
一、使用位運算。
二、用a*a代替pow(a,2.0)。
三、減小整數除法,如用i/(j*k)代替i/j/k。
6、C語言函數優化。
一、函數用inline代替外部調用(但會增長程序長度)。
二、定義函數原型,便於編譯器優化。
三、不定義不使用的返回值。
四、本地函數聲明爲靜態。