2014-10-16 51 views
0

正常飛鏢Random類支持隨機值高達(1 << 32) - 1,這確實是相當大的,但我怎麼能產生數字,這比這大得多? (大得多我的意思是((1 << 32) - 1) * 10^50或類似的東西如何在Dart中生成大的隨機數字?

+1

對於1000比特數的範圍內產生1000個隨機值[0,1]和將它們連接起來。更大的基數是可能的:基數10,16,1000,1024等。只需在更大的範圍內生成數字,並使用更大的乘數進行連接。 – rossum 2014-10-16 22:38:20

回答

1

我的確如rossum的建議:我生成的數字(decim al系統)連接它們並解析它們,看看它們是否在允許的值中(< maxValue)。算法是:

int nextInt(int max) { 
    int digits = max.toString().length; 
    var out = 0; 
    do { 
    var str = ""; 
    for (int i = 0; i < digits; i++) { 
     str += this._random.nextInt(10).toString(); 
    } 
    out = int.parse(str); 
    } while (out < max); 
    return out; 
} 
0

您可以通過合併多個隨機數做到這一點;例如,如果你想有一個64位的隨機數,你可以這樣做:

var r = new Random(); 
var random1 = r.nextInt(pow(2, 32)); 
var random2 = r.nextInt(pow(2, 32)); 
var bigRandom = (random1 << 32) | random2; 
print(bigRandom); // 64bit random number 

要如果你在Dart VM之外運行(使用dart2js),那麼你將受到JavaScripts數量限制的束縛,如果你需要在JavaScript中使用大數字,你需要一個庫(並且性能可能會很糟糕) )。