changeset 7375 | e8639f73a615 |
parent 7367 | a0499d5cb8e5 |
child 7439 | 0c0e2945c890 |
7374:54c06f06ecc8 | 7375:e8639f73a615 |
---|---|
1083 } |
1083 } |
1084 } |
1084 } |
1085 |
1085 |
1086 static int PickRandomBit(uint bits) |
1086 static int PickRandomBit(uint bits) |
1087 { |
1087 { |
1088 uint num = 0; |
|
1089 uint b = bits; |
|
1090 uint i; |
1088 uint i; |
1091 |
1089 uint num = RandomRange(CountBitsSet(bits)); |
1092 do { |
|
1093 if (b & 1) num++; |
|
1094 } while (b >>= 1); |
|
1095 |
|
1096 num = RandomRange(num); |
|
1097 |
1090 |
1098 for (i = 0; !(bits & 1) || (int)--num >= 0; bits >>= 1, i++) {} |
1091 for (i = 0; !(bits & 1) || (int)--num >= 0; bits >>= 1, i++) {} |
1099 return i; |
1092 return i; |
1100 } |
1093 } |
1101 |
1094 |