1

(float)arc4random() を使用して [0, 1[ に含まれる float 乱数を生成するにはどうすればよいですか?

私のコードは

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

もっと良いものはありますか?

4

4 に答える 4

3

2つの間にいくつの可能な数字が必要かによって異なりますか?

しかし、あなたは使うことができます...

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 に答える
-2

次のように使用できます。

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

そのfilteredArrayofPerticularword配列に、番号を格納できます。

于 2013-10-02T13:18:00.937 に答える