这似乎是一个很奇怪的问题: 这是我的代码: #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; } 如果我replace那一行说 newRandomNumber = rand() % […]
我有两个文本框,用户可以input2个正整数(使用Objective-C)。 目标是在两个数字之间返回一个随机值。 我用“男人arc4random”,仍然不能完全包围我的头。 我已经想出了一些代码,但它是越野车。 float lowerBound = lowerBoundNumber.text.floatValue; float upperBound = upperBoundNumber.text.floatValue; float rndValue; //if lower bound is lowerbound < higherbound else switch the two around before randomizing. if(lowerBound < upperBound) { rndValue = (((float)arc4random()/0x100000000)*((upperBound-lowerBound)+lowerBound)); } else { rndValue = (((float)arc4random()/0x100000000)*((lowerBound-upperBound)+upperBound)); } 现在,如果我把值0和3,它似乎工作得很好。 但是,如果我使用数字10和15,我仍然可以获得低至1.0000000或2.000000的“rndValue”。 我是否需要详细说明algorithm,还是需要改变我使用arc4random的方式?
我已经读过,它与时间有关,也包括time.h,所以我假设了很多,但它是如何工作的? 另外,它是否有任何倾向于奇数或偶数或类似的东西? 最后是在C标准库还是基础框架中有更好的分布?
我使用下面的代码来testingc++ <random>库。 为什么每次运行编译的可执行文件都得到完全相同的序列? rd()在编译时是确定的吗? 每次运行如何获得不同的输出? 在Windows 7 64bit上的GCC 4.8.1。 使用来自http://nuwen.net/mingw.html的 MinGW发行版 编辑:我用Visual Studiotesting了相同的代码。 没有问题。 输出是不确定的。 这可能是在我使用的mingw gcc 4.8.1中的一个bug。 #include <iostream> #include <random> using namespace std; int main(){ random_device rd; mt19937 mt(rd()); uniform_int_distribution<int> dist(0,99); for (int i = 0; i< 16; ++i){ cout<<dist(mt)<<" "; } cout <<endl; }
我主要是一个Java头,我想要一个方法来产生0到74之间的伪随机数。在Java中,我将使用以下方法: Random.nextInt(74) 我对有关种子或真正的随机性的讨论不感兴趣,只是在Objective-C中完成同样的任务。 我search了谷歌,似乎有很多不同和相互矛盾的信息。