Arm*_*imp 6 random objective-c
我试图随机生成一个正数或负数,而不是担心我希望随机产生1或-1的更大范围,只是乘以我的另一个随机数.
我知道这可以用更长的生成0或1的规则来完成,然后检查返回并使用它来乘以1或-1.
希望有人知道在数字上随机设置符号的简单方法.尽量保持我的代码尽可能干净.
Dav*_*ong 23
我喜欢使用,arc4random()因为它不需要你为随机数生成器播种.它也方便地返回一个uint_32_t,所以你不必担心结果介于0和1之间,等等.它只会给你一个随机整数.
int myRandom() {
return (arc4random() % 2 ? 1 : -1);
}
Run Code Online (Sandbox Code Playgroud)
Dig*_*oss 10
如果我正确理解了这个问题,你需要一个伪随机序列1和-1:
int f(void)
{
return random() & 1 ? 1 : -1;
// or...
// return 2 * (random() & 1) - 1;
// or...
// return ((random() & 1) << 1) - 1;
// or...
// return (random() & 2) - 1; // This one from Chris Lutz
}
Run Code Online (Sandbox Code Playgroud)
更新:好的,自从我写这篇文章以来,一直困扰着我.常见RNG的一个常见弱点是低阶位可以经历短周期.最好测试一个高阶位: random() & 0x80000 ? 1 : -1