Objective C - 随机结果为1或-1

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

  • 为什么不`(random()&2) - 1`? (5认同)
  • 只是提醒那些不熟悉确定性系统生成的随机数的人 - 他们并不是真正随意的.你可能想在某个方便的"app start-up"点调用`srandomdev();`.你只需要调用一次.这使随机数生成器具有合理随机位的来源,因此来自`random()`的结果是"更随机".否则,`random()`每次都以完全相同的种子开始. (2认同)