2012-07-26 21 views
29

¿Cómo puedo generar números aleatorios usando Dart?¿Cómo puedo generar números aleatorios en Dart?

+4

¿Cómo sabe que son malos números? Lo aleatorio es que nunca se puede decir realmente ... http://i46.tinypic.com/2vw7237.gif – corsiKa

+1

Créeme, sabrías que son malas si usaste darrt: core Math. :) Este es el error: http://code.google.com/p/dart/issues/detail?id=499 –

+3

Si quieres saber si tus números aleatorios son malos, utiliza mi biblioteca ChiSquare para averiguar: https: //github.com/kaisellgren/ChiSquare –

Respuesta

36

Uso Random clase de dart:math:

import 'dart:math'; 

main() { 
    var rng = new Random(); 
    for (var i = 0; i < 10; i++) { 
    print(rng.nextInt(100)); 
    } 
} 

Este código se probó con el dardo VM y dart2js, a partir del momento de escribir esto.

+0

Hola @Seth Ladd ... descargué dart de http://www.dartlang.org/downloads.html hace unos minutos y #import ('dart: math'); da un mensaje "no se puede encontrar la fuente referenciada" ... Me falta algo – Aaron

+1

Le conviene leer '/ dev/urandom' con la clase' File' si quiere números aleatorios criptográficamente fuertes. – Tower

+0

¿Qué hay de los números aleatorios negativos (dobles)? Estoy tratando de implementar un método randomRange que genere, por ejemplo, de -0.8 a 0.9 ... el resultado sería, por ejemplo, -0.32 –

12

Si necesita números aleatorios criptográficamente seguras (por ejemplo, para el cifrado), y estás en un navegador, se puede utilizar el DOM cryptography API:

int random() { 
    final ary = new Int32Array(1); 
    window.crypto.getRandomValues(ary); 
    return ary[0]; 
} 

Esto funciona en Dartium, Chrome y Firefox , pero probablemente no en otros navegadores ya que esta es una API experimental.

3

Una solución alternativa podría estar utilizando el siguiente código DRandom. Esta clase debe usarse con una semilla. Proporciona una interfaz familiar de lo que cabría esperar en .NET, fue portada desde Random.cs de mono. Este código puede no ser criptográfico seguro y no ha sido probado estadísticamente.

+0

He usado DRandom antes. ¡Buena lib! –

0

acabo de escribir esta pequeña clase para generar normales Los números aleatorios ... fue una partida decente punto para la verificación que tengo que hacer. (Estos conjuntos se distribuirán en una curva con forma de "campana" ). La semilla se establecerá aleatoriamente, pero si desea poder regenerar un conjunto, puede pasar una semilla específica y generar el mismo conjunto.

Divertirse ...

class RandomNormal { 
    num  _min, _max, _sum; 
    int  _nEle, _seed, _hLim; 
    Random _random; 
    List _rNAr; 

    //getter 
    List get randomNumberAr => _rNAr; 

    num _randomN() { 
    int r0 = _random.nextInt(_hLim); 
    int r1 = _random.nextInt(_hLim); 
    int r2 = _random.nextInt(_hLim); 
    int r3 = _random.nextInt(_hLim); 

    num rslt = _min + (r0 + r1 + r2 + r3)/4000.0; //Add the OS back in... 
    _sum += rslt; //#DEBUG ONLY 
    return(rslt); 
    } 

    RandomNormal(this._nEle, this._min, this._max, [this._seed = null]) { 
    if (_seed == null) { 
     Random r = new Random(); 
     _seed = r.nextInt(1000); 
    } 
    _hLim = (_max - _min).ceil() * 1000; 
    _random = new Random(_seed); 
    _rNAr = []; 
    _sum = 0;//#DEBUG ONLY 

    h2("RandomNormal with k: ${_nEle}, Seed: ${_seed}, Min: ${_min}, Max: ${_max}");//#DEBUG ONLY 
    for(int n = 0; n < _nEle; n++){ 
     num randomN = _randomN(); 
     //p("randomN = ${randomN}"); 
     LIST_add(_rNAr, randomN); 
    } 

    h3("Mean = ${_sum/_nEle}");//#DEBUG ONLY 
    } 
} 


new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 
new RandomNormal(1000, 80, 120); 

a continuación, puedes utilizar de esta manera para comprobar la media de conjuntos de 1000 nums generadas entre un límite bajo y alto. Los valores se almacenan en la clase para que se pueda acceder a ellos luego de la instanciación.

_swarmii

3

He aquí un fragmento para generar una lista de números aleatorios

import 'dart:math'; 

main() { 
    var rng = new Random(); 
    var l = new List.generate(12, (_) => rng.nextInt(100)); 
} 

Esto generará una lista de 12 números enteros de 0 a 99 (inclusive).

3

A API aleatorio seguro se agregó a dart:math

new Random.secure() 

dart:math Random añadió un constructor secure devolver un generador aleatorio criptográficamente seguro que lee desde la fuente de entropía proporcionada por el embedder para cada generada valor aleatorio

que los delegados a window.crypto.getRandomValues() en el navegador y el sistema operativo (como urandom en el servidor)

+0

Esta nueva API está disponible en 1.14-dev o superior. –

Cuestiones relacionadas