0xd*_*0cc 35 c random objective-c
这似乎是一个非常奇怪的问题:
这是我的代码:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
srand((unsigned int)time(NULL));
int newRandomNumber = 0;
newRandomNumber = rand() % 7;
NSLog(@"%d", rand() % 7); //This prints out what I expected
NSLog(@"newRandomNumber = %d", newRandomNumber); // This always prints out 0!
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我替换那一行说
newRandomNumber = rand() % 7
Run Code Online (Sandbox Code Playgroud)
同
newRandomNumber = rand() % 8
Run Code Online (Sandbox Code Playgroud)
一切都很完美.为什么会这样?
geo*_*org 36
好吧,这个
int seed;
for(seed = 1; seed < 10; seed++) {
srand(seed);
printf("%4d %16d\n", seed, rand());
}
Run Code Online (Sandbox Code Playgroud)
版画
1 16807
2 33614
3 50421
4 67228
5 84035
6 100842
7 117649
8 134456
9 151263
Run Code Online (Sandbox Code Playgroud)
这让我想到了 rand() = seed * 16807
维基百科文章线性同余生成器确认CarbonLib确实使用Xn + 1 = Xn*16807来生成随机数.
似乎不太可能,但运行一些测试,在一个srand后,第一个rand似乎总是可被7整除,至少在一个int大小的变量中.
在几次运行中,我得到了1303562743,2119476443和2120232758,所有这些都是mod 7到0.
第二个rand()工作,因为它是第二个rand().rand()在你的第一个之前扔掉rand()......或者更好的是,使用更好的随机数生成器random或者arc4rand如果可用的话.
另请参阅Stack Overflow问题为什么(rand()%any)在C++中始终为0?.
| 归档时间: |
|
| 查看次数: |
5359 次 |
| 最近记录: |