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

C# Discussion :

Structure pour grands entiers positifs


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Geek en formation
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Geek en formation

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 9
    Points
    9
    Par défaut Structure pour grands entiers positifs
    Salut!
    Petite question rapide: Est-ce que quelqu'un connaitrait par hasard une structure genre BigInteger mais uniquement pour les entiers positifs.
    Jusqu'a maintenant j'utilisais BigInteger mais apres la correction d'un bug je me rend compte qu'il faudrait que je fasse un test mas ca me plomberait mes performances un peu trop .
    D'ou ma question (mes resultats seront toujours positifs donc ca me fait ca de moins a gerer)
    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 22
    Points : 28
    Points
    28
    Par défaut
    Un Unsigned Long(ulong) devrait faire l'affaire

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Geek en formation
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Geek en formation

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Unfortunately not.
    Je parle d'entiers genre 1024 bits ^^
    Du coup j'ai besoin de la structure type BigInteger. Mais le fait qu'il puisse enlever ou rajouter un byte a zero si le premier bit est a un vient légèrement contrecarrer mes plans

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par NonoSC Voir le message
    je me rend compte qu'il faudrait que je fasse un test mas ca me plomberait mes performances un peu trop
    Euh, je comprends pas trop, là... le fait de vérifier si la valeur est supérieure à 0 te plombe les perfs ? ça me surprend beaucoup...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Geek en formation
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Geek en formation

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Non desole, j'ai pas assez detaille.
    En gros, BigInteger a une methode ToByteArray qui va mettre le BigInteger dans un tableau avec le byte de poids faible en premier.
    Et si le bit de poids fort est a 1 (celui du byte de poids fort j'entends) et que l'entier est positif, il va rajouter un byte a 0 pour le signe.
    Du coup je l'enlevais lorsque j'en avais pas besoin (mes nombres sont toujours positifs et la maniere dont je les utilise apres fait que ce byte a 0 je m'en fiche donc je l'ai vire).
    Mais la j'ai remarque un bug du a ca. En gros je fais ma division entre 2 BigInteger et j'attends un resultat sur 2 bytes mais parfois le premier est a 0 (normal jusque la). Donc mon resultat est renvoye sur 1. Mais du coup celui la de byte a zero j'en ai besoin. Donc faudrait que je le rajoute. Mais pas a chaque fois. En gros faut que je fasse un test sur la longueur de mon resultat sur une boucle aui se repete un tres grand nombre de fois. D'ou le plombage de perf.
    En gros le fait qu'il gere les nombres negatifs a sa maniere m'enquiquine, d'ou la question: existerait-il une structure similaire a BigInteger mais juste pour les entiers naturels ^^
    (Erf, en esperant que c'est pas trop incomprehensible)

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par NonoSC Voir le message
    (Erf, en esperant que c'est pas trop incomprehensible)
    euh...

    En fait ce que je comprends pas, c'est pourquoi tu as besoin de te préoccuper de la représentation binaire. Si c'est juste pour économiser un byte inutile, je vois vraiment pas l'intérêt...

    EDIT: OK, j'ai un peu fait joujou avec BigInteger dans LinqPad, et je vois ce que tu veux dire pour le byte à 0... mais je comprends toujours pas en quoi c'est un problème

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    Citation Envoyé par tomlev
    OK, j'ai un peu fait joujou avec BigInteger dans LinqPad, et je vois ce que tu veux dire pour le byte à 0...
    Pour le coup je ne vois pas ce qu'il veux dire.

    J'ai utiliser les exemple suivant :
    10 => {0x0A}
    -10 => {0xF6}
    214748364700 => { 0x9C, 0xFF, 0xFF, 0xFF, 0x31 }
    2351959869397967830785 => {0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F}

    EDIT:
    Ah je viens de tomber sur l'exemple voulu
    255 => {0xFF, 0x00}

    EDIT2:
    Pour savoir si BigInteger à rajouter un byte en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    BigInteger  big = new BigInteger(255);
    byte[] bbig = big.ToByteArray();
    if (bbig.Length > 1 && bbig[bbig.Length-1] == 0 && (bbig[bbig.Length-2] & 0x80) != 0)
    {
      //Cas ou BigInteger a rajouter un byte
    }
    Tu ne devrais enlever le byte à zéro que dans le cas décrit par le bout de code

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Geek en formation
    Inscrit en
    Décembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Geek en formation

    Informations forums :
    Inscription : Décembre 2011
    Messages : 18
    Points : 9
    Points
    9
    Par défaut
    Merci encore pour toutes ces reponses

    En fait mon probleme c'est juste que j'ai envie d'eviter de faire ce test. La
    maniere dont j'utilise Big Integer fait qu'il faudrait que je fasse ce test a un moment donne.
    Pas difficile de verifier si y'a eu un 0 de rajoute ou non mais je l'appellerai tellement de fois que ca me plomberait les perfs.
    Pour le moment j'ai moyen de contourner le probleme mais au detriment d'autres facteurs.
    Du coup ma seule solution pour ne pas perdre niveau perfs et ne pas mettre de cote certains aspects de mon programme serait de trouver une librairie specialement concue pour les calculs sur les tres grands entiers positifs.
    D'ou la question de depart

Discussions similaires

  1. [Débutant] tableau de structure pour grand debutant
    Par sp2308 dans le forum C#
    Réponses: 3
    Dernier message: 10/04/2014, 21h15
  2. Problème d'overflow pour un grand entier
    Par adrienmgs dans le forum Débuter
    Réponses: 10
    Dernier message: 01/02/2011, 19h27
  3. Surcharge de l'opérateur / en c++ pour les entiers très grands
    Par marbouchi dans le forum Mathématiques
    Réponses: 1
    Dernier message: 05/05/2009, 00h08
  4. Surcharge de l'opérateur / pour les entiers très grands
    Par marbouchi dans le forum Débuter
    Réponses: 5
    Dernier message: 04/05/2009, 21h28
  5. Réponses: 3
    Dernier message: 12/08/2007, 16h49

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