1

使用 (float)arc4random() 如何生成包含在 [0, 1[ 即区间 0-1 中的浮点随机数,其中包含 0,排除 1?

我的代码是

  do { 
          c = ((float)arc4random() / 0x100000000);
     }
  while (c == 1.0);

有更好的吗?

4

4 回答 4

3

这取决于您想要在两者之间有多少个可能的数字?

但是你可以使用...

float numberOfPossibilities = ...;
float random = (float)arc4random_uniform(numberOfPossibilities) / numberOfPossibilities;

要排除 1 你可以做...

float random = (float)arc4random_uniform(numberOfPossibilities - 1) / numberOfPossibilities;
于 2013-10-02T13:19:14.993 回答
2
// Get a value greater than the greatest possible random choice
double one_over_max = UINT32_MAX + 1L;
// Use that as the denominator; this ratio will always be less than 1
double half_open_result = arc4random() / one_over_max;

因此,分辨率(可能的结果值的数量)与原始随机函数的分辨率相同。最大结果与区间顶部之间的差距是您选择的分母与原始结果数量之间的差异,超过分母。在这种情况下,这是 1/4294967296;很小。

于 2013-10-02T20:16:40.773 回答
0

这是 Float Swift 3.1的扩展

// MARK: Float Extension

public extension Float {

    /// Returns a random floating point number between 0.0 and 1.0, inclusive.
    public static var random: Float {
        return Float(arc4random()) / 0xFFFFFFFF
    }

    /// Random float between 0 and n-1.
    ///
    /// - Parameter n:  Interval max
    /// - Returns:      Returns a random float point number between 0 and n max
    public static func random(min: Float, max: Float) -> Float {
        return Float.random * (max - min) + min
    }
}
于 2017-09-06T01:53:01.710 回答
-2

你可以像这样使用:

Float num = (arc4random() % ([[filteredArrayofPerticularword count] FloatValue]));

在filteredArrayofPerticularword 数组中,您可以存储您的号码。

于 2013-10-02T13:18:00.937 回答