2

我目前有一种方法可以尝试在我提供的两个数字之间获得随机浮点数,但是它不能正常工作。

例如,如果我输入 4.0 作为较低的浮点数,4.5 作为较高的浮点数,我得到的结果类似于 0.8 或 1.2,有时它介于这两个数字之间。所以这让我相信这种方法不好。这是方法:

- (float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2 {
    return ((float)arc4random() / ARC4RANDOM_MAX) * num2-num1 + num1;
}

这是 ARC4RANDOM_MAX

#define ARC4RANDOM_MAX 0x100000000

无论如何,是什么原因造成的,我该如何解决?

谢谢!

4

1 回答 1

7

您的代码意味着:

return (((float)arc4random() / ARC4RANDOM_MAX) * num2) - num1 + num1;

你需要括号num2-num1

return ((float)arc4random() / ARC4RANDOM_MAX) * (num2-num1) + num1;
于 2012-07-16T21:30:22.440 回答