开始:
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
已不是一个功能,并发现我自己。]