IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[BigIntegers] Obtenir un random borné entre deux big integers.


Sujet :

API standards et tierces Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [BigIntegers] Obtenir un random borné entre deux big integers.
    Bonjour,

    Voila mon problème, je souhaite générer un BigInteger compris entre 2^1023 et 2^1024.
    Etant donné qu'il n'existe pas de méthode dans la classe BigInteger permettant de le faire je passe par deux variables min et max.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Random rnd = new Random();
    BigInteger Max = new BigInteger(1024, rnd);
    BigInteger Min = new BigInteger(1023, rnd);
    Pour obtenir ensuite mon BigInteger borné je calcule la difference puis je dois ensuite generer un aleatoire entre 0 et ma différence puis y ajouter le min.
    Or c'est la que le probleme arrive.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    BigInteger Diff = Max.subtract(Min);
    int diff = Diff.intValue();
    BigInteger var = new BigInteger(diff, rnd); 
    var.add(Min);
    Mon erreur se situe a la création de var car Diff peut etre negatif et de plus Diff est bien trop grand pour etre exposant.

    Avez vous une idée pour résoudre mon problème ?

    Sachant que l'objectif final est d'estimer le nombre de nombre premier dans cette borne.
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Aiolii Voir le message
    Bonjour,

    Voila mon problème, je souhaite générer un BigInteger compris entre 2^1023 et 2^1024.


    Etant donné qu'il n'existe pas de méthode dans la classe BigInteger permettant de le faire je passe par deux variables min et max.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Random rnd = new Random();
    BigInteger Max = new BigInteger(1024, rnd);
    BigInteger Min = new BigInteger(1023, rnd);
    Pour obtenir ensuite mon BigInteger borné je calcule la difference puis je dois ensuite generer un aleatoire entre 0 et ma différence puis y ajouter le min.
    Peux pas marcher comme ça.

    Dans l'absolu, si max vaut 2^1024-1 (valeur probable) et min vaut 0 (valeur probable), max-min vaut 2^1024-1. Un nombre aléatoire dans le range [0, différence] peux être par exemple, 0.
    0+0 donne 0 (et la tête à toto)
    0 n'est pas dans le range 2^1023, 2^1024

    Bref,
    En supposant que ton range est
    [2^2013, 2^2014[, c'est la même chose que (2^2013 + [0,2^2013[) et c'est plus simple selon moi :p
    Il suffit de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    new BigInteger(2013,random)+2^2013
    autrement dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BigInteger bi_2_2013 = new BigInteger(0).flipBit(2013); // y a peut être d'autres moyen de faire 2^2013 ^^
    BigInteger bi = new BigInteger(2013,random).add(bi_2_2013);
    Avec les nombre aléatoires, pour ne pas faire de bétises, il ne faut jamais additionner / soustraire / faire des moyennes entre eux => Ca change la courbe de distribution
    Il faut par contre se faciliter la vie en ramenant si possible le problème à un problème basé sur 0

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup !

    Effectivement, c'est beaucoup plus simple de raisonner de cette façon et puis au moins ça fonctionne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Math / Random] Génération nombre aléatoire compris entre deux bornes
    Par oligig dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 30/06/2013, 17h23
  2. Nombre aléatoire compris entre deux bornes
    Par kokosnuss dans le forum Pascal
    Réponses: 2
    Dernier message: 03/12/2006, 23h07
  3. Comment obtenir le nombre de jours entre deux timedatepicker
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2005, 11h59
  4. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34
  5. comment obtenir l’intervalle de mois entre deux date
    Par looc 6699 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/02/2005, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo