Adracus
Adracus

Reputation: 1009

How do I generate big random numbers in Dart?

The normal Dart Random class supports Random values up to (1 << 32) - 1, which is indeed quite big, but how can I generate numbers, which are much larger than this? (With much larger I mean ((1 << 32) - 1) * 10^50 or something like that.

Upvotes: 4

Views: 868

Answers (3)

Schotti100
Schotti100

Reputation: 159

Here is my implementation in case someone needs it in the future:

class BigRandom {
  static final rnd = new Random();

static int nextInt(int max) {
if (max > pow(2, 32)) {
  var charCount = max.toString().length;
  var seperator = (charCount / 2).floor();

  var leftHalf = int.parse(max.toString().substring(0, seperator));
  var rightHalf = int.parse(max.toString().substring(seperator));

  var rndLeft = nextInt(leftHalf);
  var rndRight = nextInt(rightHalf);
  return int.parse('$rndLeft$rndRight');
} else {
  return rnd.nextInt(max);
}
}
}

Upvotes: -1

Adracus
Adracus

Reputation: 1009

I did is as rossum suggested: I generated numbers (in decimal system) concatenated them and parsed them and looked if they were among the allowed values ( < maxValue). Algorithm is:

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;
}

Upvotes: 3

Danny Tuppeny
Danny Tuppeny

Reputation: 42433

You can do this by combining multiple random numbers; for example if you want a 64bit random number, you could do:

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

Be aware; if you're running outside of the Dart VM (using dart2js), then you'll be bound by JavaScripts number restrictions. If you need rally big numbers in JavaScript, you'll need a library (and the performance will likely suck).

Upvotes: 6

Related Questions