【发布时间】:2010-06-24 12:06:22
【问题描述】:
我有一个非常基本的随机数函数,它可以从一个范围内生成一个随机数;
即:
// The random is seeded earlier on in the applicationDidFinishLaunching() function
-(NSUInteger)makeRandomNumber:(NSUInteger)minNumber to:(NSUInteger)maxNumber
{
//NSUInteger i = (NSUInteger)( (random() / (double)RAND_MAX) * y);
NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber;
return i;
}
我想在这个函数中添加一个可选模运算,这样你就只返回某个东西的模数。
我想做这个来为随机的人生成工资,我发现 5 或 0 的工资更具可读性。
我不确定如何设置可选参数或强制随机化继续循环,直到找到可选模值。
另一个问题是,如果找不到模数,有时循环会一直持续下去。
即;
在 0 到 100 之间随机化,并返回一个模数为 5 的值。
编辑:这应该适用于任何范围,无论最小值或最大值是多少。以上数字仅为示例。
【问题讨论】:
-
用取模运算符计算随机数通常很糟糕。你不能保证你的随机数生成器的低位是随机的。
-
被注释掉的随机化器是一种更好的随机化方式吗?
-
我通过一些测试发现该范围不会返回您范围内的 maxNumber。 [代码] NSUInteger i = (arc4random() % (maxNumber - minNumber)) + minNumber; [/code] 例如,如果我在 1 到 10 之间的范围内进行 rand,我不会得到 10,也不会得到 1。如果你想要一个包含 1 和 10(最小值和最大值)的范围,算法需要调整。
标签: objective-c random modulus