開始:
int input = something;
int result = gsl_rng_uniform_int(r, input);
有可能的編譯器會發出警告不安全收縮轉換,所以更改爲:
// 0 <= return value < input, so conversion is safe
int result = (int) gsl_rng_uniform_int(r, input);
或者安全:
if (input <= 0) { panic(); }
unsigned long rawresult = gsl_rng_uniform_int(r, input);
if (rawresult > INT_MAX) { panic(); }
int result = (int) rawresult;
這些線可能被包裹在幫手功能中:
int gsl_rng_uniform_signed(const gsl_rng *r, int input) {
if (input <= 0) { panic(); }
unsigned long rawresult = gsl_rng_uniform_int(r, input);
if (rawresult > INT_MAX) { panic(); }
return (int) rawresult;
}
在任何情況下,測試您的輸入通常比測試您所依賴的函數的輸出更有用,如果您信任gsl_rng_uniform_int
,那麼測試輸入就足夠了。
[編輯:哇,谷歌索引真的很積極。我剛剛搜查檢查gsl_rng_uniform_signed
已不是一個功能,並發現我自己。]