Randomness

0 到 1 之間的隨機數 - 快速的小問題

  • October 8, 2018

我知道隨機數這個話題已經被討論過很多次了,但我有一個小問題。

我需要盡可能簡單地獲得一個偽隨機數(不是 ungamealbe)。問題是我需要數字為 1 或 0,並且我希望該值能夠在每次循環迭代中為奇數或偶數。

如果我使用類似的東西:

while(x < 10) {
uint randomNumberBetween0And1 = uint(keccak256(abi.encodePacked(block.difficulty, now))) % 2;
x++;
}

該值將是 10 乘以 0(每次迭代中為 0,因為隨機數是偶數)或 10 x 1(因為隨機數每次都是奇數)。如何使迭代之間的隨機數不同?

試試這個:

while(x < 10) {
   uint rnd = uint(keccak256(block.difficulty, now, x)) & uint(0x1);
   x++;
}

或者,如果您有while(true)上面寫的:

uint x = 0;
while(true) {
   uint rnd = uint(keccak256(block.difficulty, now, x++)) & uint(0x1);

   ...YOUR CODE HERE hopefully with a condition for break...
}

引用自:https://ethereum.stackexchange.com/questions/60196