2014-10-16 95 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中使用大数字,你需要一个库(并且性能可能会很糟糕) )。