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

Algorithmes et structures de données Discussion :

Décomposer une valeur pour en retirer les octets ?


Sujet :

Algorithmes et structures de données

  1. #21
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par AsmCode
    Ce nombre est stocké dans un fichier, alors je pourrais aller lire une partie de ce nombre, le traiter puis avoir un octet et tant qu'il reste une partie du nombre, je modifie mon octets ou mes octets obtenue, donc j'encombre moins la mémoire, mais je fais plus d'accès au disque.
    Si tes nombres font des megaoctets, alors tu peux penser a les sectionner pour ne pas les avoir en memoire en entier, mais la le disque va te ralentir tres fortement (surtout que tu vas rogner sur le cache), pense plutot a booster la RAM... Et il faut avoir des algos qui permettent de faire ca !

    A moins d'avoir une memoire tres limitee (et inaugmentable) et des nombres tres grands (la notion de "grand" depend de la memoire disponible), cette solution n'est pas a choisir... Non seulement ca va compliquer le code, mais surtout ca va ralentir tres fortement ton programme. Apres, c'est un compromis temps/memoire, a toi de savoir ce qui est acceptable.

  2. #22
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par AsmCode
    Mais c'est justement cette méthode que je cherches

    Comment par exemple, admettons que j'ai mes 2 octets de tantôt, soit AB
    donc valeur numérique de 16706, petit nombre pour faire l'exemple plus simple, comment "découper" ce nombre en tranche pour le traiter plus facilement au final ? :o
    Le plus facilement, c'est par octet. Le plus efficace, ca depend des calculs que tu veux faire dessus, mais la taille du registre de la machine devrait etre une bonne indication (qui est le plus souvent un multiple de l'octet, d'ailleurs).

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par alveric
    Citation Envoyé par AsmCode
    Ce nombre est stocké dans un fichier, alors je pourrais aller lire une partie de ce nombre, le traiter puis avoir un octet et tant qu'il reste une partie du nombre, je modifie mon octets ou mes octets obtenue, donc j'encombre moins la mémoire, mais je fais plus d'accès au disque.
    Si tes nombres font des megaoctets, alors tu peux penser a les sectionner pour ne pas les avoir en memoire en entier, mais la le disque va te ralentir tres fortement (surtout que tu vas rogner sur le cache), pense plutot a booster la RAM... Et il faut avoir des algos qui permettent de faire ca !

    A moins d'avoir une memoire tres limitee (et inaugmentable) et des nombres tres grands (la notion de "grand" depend de la memoire disponible), cette solution n'est pas a choisir... Non seulement ca va compliquer le code, mais surtout ca va ralentir tres fortement ton programme. Apres, c'est un compromis temps/memoire, a toi de savoir ce qui est acceptable.
    En fait ce que j'avais idée de faire c'est que mon nombre est textuellement représenté dans une notation scientifique ou mathématique pour qu'il soit court. Puis je voulais le charger en mémoire. Admettons charger 2^128. Ensuite je voudrais prendre une portion de cette valeur puis la traiter, ensuite prendre une autre portion, puis la traiter. Mais suis-je obligé d'avoir la valeur entière du nombre pour le découper en morceau pour le traiter ou si il y a des algos pour faire un peu comme j'ai dit ?

  4. #24
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par AsmCode
    Ensuite je voudrais prendre une portion de cette valeur puis la traiter, ensuite prendre une autre portion, puis la traiter. Mais suis-je obligé d'avoir la valeur entière du nombre pour le découper en morceau pour le traiter ou si il y a des algos pour faire un peu comme j'ai dit ?
    S'il est enregistre dans un fichier sous forme binaire (i.e. pas un fichier texte qui contient la suite des chiffres), tu peux lire simplement octet par octet... (suiant le langage, bien sur) Si tu as besoin, tu peux rajouter au debut du fichier un en-tete qui donne la taille du nombre en octets, par exemple (encore que la taille du fichier soit accessible directement par le langage le plus souvent).

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par alveric
    Citation Envoyé par AsmCode
    Ensuite je voudrais prendre une portion de cette valeur puis la traiter, ensuite prendre une autre portion, puis la traiter. Mais suis-je obligé d'avoir la valeur entière du nombre pour le découper en morceau pour le traiter ou si il y a des algos pour faire un peu comme j'ai dit ?
    S'il est enregistre dans un fichier sous forme binaire (i.e. pas un fichier texte qui contient la suite des chiffres), tu peux lire simplement octet par octet... (suiant le langage, bien sur) Si tu as besoin, tu peux rajouter au debut du fichier un en-tete qui donne la taille du nombre en octets, par exemple (encore que la taille du fichier soit accessible directement par le langage le plus souvent).
    Mais dans ce cas-ci ça revient à stocker le fichier en lui-même non ? Car que je stock AB dans un fichier ou bien 16706 binaire, c'est la même chose

  6. #26
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Bah oui ? Tu voudrais faire comment ?

    ...oups... pas bien lu:
    En fait ce que j'avais idée de faire c'est que mon nombre est textuellement représenté dans une notation scientifique ou mathématique pour qu'il soit court.
    Donc tu voudrais enregistrer la chaine "2^128" ou "1.123E456" par exemple ?

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par alveric
    Bah oui ? Tu voudrais faire comment ?

    ...oups... pas bien lu:
    En fait ce que j'avais idée de faire c'est que mon nombre est textuellement représenté dans une notation scientifique ou mathématique pour qu'il soit court.
    Donc tu voudrais enregistrer la chaine "2^128" ou "1.123E456" par exemple ?
    Oui

    Et à partir de là, je lis mon fichier, je lis admettons "2^128" donc je sais que tout mes octets sont en fait de la valeur de 2^128 alors j'aimerais diviser cette opération en plusieurs partie pour ne pas demander au processeur de calculer d'un seul coup 2^128 pour ne pas mettre tout mes octets en mémoire d'un seul coup non plus. Mais plutôt de procéder d'une façon par "morceau" donc 1 ou plusieurs octets à la fois, puis dans une boucle je passes "aux prochaines octets" selon les morceaux de ma valeur numérique qui reste.

    Quelque chose du genre je prends 2^1 de mon 2^128, il me reste donc 2^127 à traiter ou un truc du genre.

  8. #28
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Ok, mais sous quel format tu penses enregistrer tout ca ? (2^128-5), par exemple, tu l'enregistrerais comment ? ou 3^15 ? ou un mechant nombre premier d'un millier de bits ?

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    euh.. ou trouves-tu le 2^128-5 :

    J'ai de la misère à te suivre la dessus

  10. #30
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Je vouslais dire: quel format tu veux pour ton texte ? Si tu veux enregistrer le nombre ((2^128)-5) par exemple, tu le codes comment dans ton fichier ? autre exmeple, pour 3^15 tu fais comment ?

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Hmm, j'avais pensé à un format selon la valeur à traiter. C'est-à dire utiliser un certain standard de notation court qui me permet en même temps de le diviser aisément par portion.

    Par exemple la valeur 16706 pour 'AB' pourrait se noter:

    (2^14) + 322

    Mais je dois encore trouver comment traiter une partie de cette notation afin de me faire une boucle pour ne sortir qu'un petit nombre d'octets à la fois. Bien sûr que cette partie ne sortirait pas la vrai valeur du premier octet par exemple, mais je peux toujours additionner les résultat des calculs à chaque itération de la boucle. C'est plus de calcul, mais au moins je n'encombre pas la mémoire avec un gros paquet de bits, c'est juste une énorme boucle.

    Mais je dois quand même trouver comment traiter cela par partie, ça doit sûrement se faire, c'est seulement des maths

    Quelqu'un à une idée ?

    Admettons on prend l'exemple simple de (2^14) + 322

    Comment traiter cela par partie :

  12. #32
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 289
    Points : 342
    Points
    342
    Par défaut
    Dans ce cas, autant faire/reprendre un calculateur symbolique, non ?

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    euh qu'est-ce qu'un calculateur symbolique ?

  14. #34
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    ... Un calculateur capable de calculer à partir de la représentation symbolique (la suite de chiffre représentant un nombre), plutôt qu'à partir de la représentation numérique (la suite de bits en mémoire, agencée de manière conventionnelle pour le calculateur).

    De toutes façons, depuis le début, on tourne autour du problème du nombre (la valeur) et de sa représentation, qui sont deux choses différentes.
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Et bien la représentation j'ai une bonne idée comment la faire, il faut juste que je me monte un algo qui va pouvoir me "monter" mon symbole. Mais ça me prend aussi un algo qui va pouvoir me "démonter" ce symbole en morceau pour pouvoir aller rechercher mes octets. Mais c'est là que je ne sais pas vraiment comment je pourrais m'y prendre.

    Est-ce qu'il y aurait une formule de mathématique qui permettrait par exemple de diviser 16706 en 3 parties par exemple et qui permettrait d'aller chercher le premier octet, admettons octet x de la partie 1, puis en examinant la 2e partie j'obtiendrai un octet y, puis ensuite un octet z

    ensuite à la fin de ma boucle pour avoir mon premier octet de départ je n'aurais qu'à (aditionner ?) x+y+z pour avoir mon 65 'A' ?

    Si il y aurait une façon de faire de ce genre ce serait parfait.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/04/2010, 15h45
  2. Comment retourné une valeur pour le main
    Par kurkLord dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2007, 22h20
  3. Réponses: 6
    Dernier message: 19/02/2007, 13h34
  4. Réponses: 18
    Dernier message: 21/10/2006, 19h10
  5. Réponses: 2
    Dernier message: 17/06/2005, 13h38

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