在上面的最後版本裡用到下面運算:
n / i(2)
n % i(2) == i(0)
n % i(2) != i(0)
n == i(0)
n == i(1)
其中/和%的代價很高.對無符號整數或有符號整數的非負值,可以用移位和掩碼運算來代替它們.
識別出程式裡經常出現的表示式,其中涉及一些過程或某種型別的常量.將它們定義為相應的特殊情況過程常常很有價值.針對特殊情況的實現經常比一般情況的處理更高效,因此應該把這類過程放入型別的計算基.對語言的內部型別,通常存在針對特殊情況的機器指令.對使用者定義型別,針對特殊情況的優化也常有顯著效果.舉例說,兩個任意多項式的除法比乙個多項式除以x難得多.與此類似,兩個高斯整數(形式為a+bi的數,其中a和b都是整數而i=√.1)相除比乙個高斯整數除以1+i難得多.
任何整數型別都應該提供下面的特殊情況過程:
練習3.2請為c++的各整數型別實現上面這些過程.
現在可以給出求冪過程的最後實現了,其中用到一些特殊情況過程:
templaterequires(integer(i) && binaryoperation(op))
domain(op) power accumulate positive(domain(op) r,
domain(op) a, i n,
op op)
a = op(a, a);
n = half nonnegative(n);
} }
templaterequires(integer(i) && binaryoperation(op)) domain(op) power accumulate(domain(op) r, domain(op) a, i n, op op)
templaterequires(integer(i) && binaryoperation(op)) domain(op) power(domain(op) a, i n, op op)
n = half nonnegative(n);
if (zero(n)) return a;
return power accumulate positive(a, op(a, a), n, op); }
由於已知a n+m = a n a m , 表示式a 0 必須求出運算op的單位元.可以把單位元作為操作的另一引數傳入,將power的定義擴充到包括0次冪:6
templaterequires(integer(i) && binaryoperation(op))
domain(op) power(domain(op) a, i n, op op, domain(op) id)
專案3.1浮點乘法和加法不可結合,用於作為power或powerleftassociated的運算就可能得到不同結果.請設法弄清,在求浮點數的整數次冪時,是power還是powerleftassociated能給出更準確的結果. 統一處理異常
1.controlleradvice 註解定義全域性異常處理類 controlleradvice public class globalexceptionhandler 2.exceptionhandler 註解宣告異常處理方法,註解的方法的引數列表裡,還可以宣告很多種型別的引數 controlle...
Web應用架構 錯誤統一處理, 和事務統一處理
因為前期,重點放在業務分析上,這兩塊一直認真思考過,覺得很簡單.一開始只是找了乙個nhibernate的示例,就決定把session的open和close和事務 transaction 的commit,放在httpmodule中處理.算是session per request的模式.之後,繼續加入錯...
Web應用架構 錯誤統一處理, 和事務統一處理
因為前期,重點放在業務分析上,這兩塊一直認真思考過,覺得很簡單.一開始只是找了乙個nhibernate的示例,就決定把session的open和close和事務 transaction 的commit,放在httpmodule中處理.算是session per request的模式.之後,繼續加入錯...