如何在Dart中生成大的随机数?

时间:2014-10-16 21:06:36

标签: random dart

正常的Dart Random类支持最多(1 << 32) - 1的随机值,这确实很大,但是如何生成比这大得多的数字呢? (我的意思是((1 << 32) - 1) * 10^50或类似的东西。

2 个答案:

答案 0 :(得分:1)

我做的是rossum建议:我生成数字(在十进制系统中)连接它们并解析它们并查看它们是否属于允许值(&lt; 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;
}

答案 1 :(得分: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中集合大数字,那么你需要一个库(并且性能可能很糟糕)。