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 :

Variables hautes précisions


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut Variables hautes précisions
    Bonjour.

    Cette question n'appartient pas strictement à l'algorithmie, mais comme je n'ai toujours pas choisi le langage dans lequel s'écrira le programme, c'est cette catégorie qui me semble la plus approprié.

    Je dois écrire un programme qui manipulera des nombres immenses. Selon ce que j'ai vu, il y a toujours une limite de précision selon le type de variable (j'ai surtout regardé en C++). Est-il possible — et si oui : comment ! — d'écrire une variable sans limite ? J'ai entendu parler de variables « multi-précisions », comment on utilise cela dans un code ?

    Merci.

    Pour vous donner un ordre d'idée, les nombres que je dois manipuler sont compris entre 10^100'000'000 et 10^1'000'000'000, voir un peu plus, dépendamment des résultats!

    Merci encore.

  2. #2
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut petite précision
    Je viens d'apprendre que la machine opère sous CentOS 6.4. Donc on oublie le C++!

  3. #3
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Salut, ce que tu cherches est une bibliothèque de nombres à virgules flottante de précision arbitraire, ou en anglais : arbitrary precision floating point (google). La plupart des langages haut niveau permettent l’existence de telles bibliothèques, certains parmi leur biblio standard.

    Question auxiliaire : pourquoi pas de C++ sachant que c'est du CentOS ?
    -- Yankel Scialom

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Sauf erreur, le C++ est un langage windows. Il crée des exécutables .exe, qui, à ma connaissance, ne sont compatibles qu'à travers des programmes genre "wine" sous linux. Mon programme doit être optimisé au maximum (J'ai un temps limité sur le supercalculateur).

    Pour l'instant, je considère Phython. Ceci-dit, je ne suis pas programmeur. Je n'ai eu que quelques cours de bases en delphi, en algo et en mathématique appliqué à l'informatique. Je travaille seul sur ce projet, donc, faute de moyen, je dois tout faire. Et à vrai dire, je rame un peu...

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Question auxiliaire : quelle est la différence entre le "multi-précision" et le "précision arbitraire". Lequel devrait être le plus performant?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 103
    Points : 110
    Points
    110
    Par défaut
    Bonjour,

    Le C++ n'est pas un langage windows, vous pouvez écrire des logiciels portables.
    C++ est puissant et structuré, mais réputé difficile.
    Python est plus souple, mais plus lent.

    quelle est la différence entre le "multi-précision" et le "précision arbitraire".
    Aucune

    Lequel devrait être le plus performant?
    À mon avis, vous vous posez les mauvaises questions en songeant dès à présent aux performances.
    La priorité est d'écrire un programme à peu près correct en un temps fini.

    Si vous n'avez pas de grandes compétences en Info et que votre programme reste "petit", je vous conseillerais python.

    Une dernière remarque concernant vos nombres ? Combien de chiffres significatifs ont-ils ? Est-ce qu'il n'y a pas une astuce pour les compresser ?

    Cordialement.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Si c'est pour unn exercice, honnêtement ils commencent à m'emm.rder profondément, ces profs..

    Si c'est pour autre chose, je m'excuse du coup de gueule ci-dessus...


    numérique: ordre de grandeur différents


    Le problème général n'est PAS la taille du nombre, mais la taille de la PRECISION....


    A part pour exercices, et pour de la crypto, il est humainement et physiquement IMPOSSIBLE d'avoir à manipuler des opérations sur de tels nombres nécessitant des bibliothèques spéciales !!!!!!!!!!!!!


    Entre 10^100 000 000 et 10^100 000 000 000 il n'y a en fait qu'un facteur 10^1 000. On a déjà réduit..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  8. #8
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Si c'est pour unn exercice, honnêtement ils commencent à m'emm.rder profondément, ces profs..

    Si c'est pour autre chose, je m'excuse du coup de gueule ci-dessus...


    numérique: ordre de grandeur différents


    Le problème général n'est PAS la taille du nombre, mais la taille de la PRECISION....


    A part pour exercices, et pour de la crypto, il est humainement et physiquement IMPOSSIBLE d'avoir à manipuler des opérations sur de tels nombres nécessitant des bibliothèques spéciales !!!!!!!!!!!!!


    Entre 10^100 000 000 et 10^100 000 000 000 il n'y a en fait qu'un facteur 10^1 000. On a déjà réduit..
    Loll... J'avoue que je n'est pas donné l'objet de la recherche! Hélas, je ne le vous donnerai pas. Je peux seulement vous dire que c'est de la recherche fondamentale en mathématique qui comprend des nombres premiers de très grandes tailles. Et ça, c'est impossible a réduire.

    Ceci-dit, l'algorithme sera petit, c'est somme toute assez simple à faire "fonctionner", mais il y a des différences de performance énormes entre les algorithmes déjà disponible sur internet. J'essaie simplement de prévoir le plus de facteurs avant de commencer question de savoir ou je vais.

    Tant qu'à y être, voici ce que la responsable de la machine m'a écrit : "nous avons 12 Gflops par coeur. La puissance maximale dépend du parallélisme du code. Votre code est-il parallèle?"

    Euh... C'est quoi un code parallèle? est-ce que je dois d’emblée prévoir le nombre de coeurs que j'utiliserai ? Je commence à me dire que je devrai trouver un partenaire!

    Merci encore.

  9. #9
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    Par défaut
    Citation Envoyé par chemkacte Voir le message
    Euh... C'est quoi un code parallèle?
    En gros, c'est du code qui permet de "découper" tes calculs en sous-parties indépendantes qui seront executés simultanément sur plusieurs processeurs.
    Ca améliore beaucoup les performances à condition que ton algorithme soit parallélisable.

    Citation Envoyé par chemkacte Voir le message
    Je commence à me dire que je devrai trouver un partenaire!
    En effet ça dépasse largement tes compétences si tu es débutant en informatique, sauf si tu as du temps et beaucoup de volonté pour acquérir ce genre de compétences.

  10. #10
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Pour ne pas avoir de limite sur tes nombres il te reste les chaines de caractères.

  11. #11
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Il y a une chose essentielle que tu as oublié d'indiquer: s'agit-il de nombres entiers ou de nombres réels?
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Points : 654
    Points
    654
    Par défaut
    Personnellement je serait plutôt partie sur du C pour ton exercice
    Ca t’évite d'apprendre l'objet qui dans ton cas n'est pas très nécessaire.

  13. #13
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!
    Il y a une chose essentielle que tu as oublié d'indiquer: s'agit-il de nombres entiers ou de nombres réels?
    Jean-Marc Blanc
    Je peux seulement vous dire que c'est de la recherche fondamentale en mathématique qui comprend des nombres premiers de très grandes tailles.
    Un nombre premier est, par définition, entier.

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par chemkacte Voir le message
    Tant qu'à y être, voici ce que la responsable de la machine m'a écrit : "nous avons 12 Gflops par coeur. La puissance maximale dépend du parallélisme du code. Votre code est-il parallèle?"

    Euh... C'est quoi un code parallèle? est-ce que je dois d’emblée prévoir le nombre de coeurs que j'utiliserai ? Je commence à me dire que je devrai trouver un partenaire!
    C'est donc bien un exercice ...

    Et ça m'enerve .. Grrrrrr....

    Après ça, les programmeurs ne savent plus utiliser leur tête pour savoir les ordres de grandeur et la réalité physique de la validité d'un certain nombre de décimales / chiffres...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  15. #15
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    C'est donc bien un exercice ...

    Et ça m'enerve .. Grrrrrr....

    Après ça, les programmeurs ne savent plus utiliser leur tête pour savoir les ordres de grandeur et la réalité physique de la validité d'un certain nombre de décimales / chiffres...
    Si c'était un exercice, je serais quoi faire... Et je n'étudie pas en informatique.

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par chemkacte Voir le message
    Si c'était un exercice, je serais quoi faire... Et je n'étudie pas en informatique.
    OK, chercheur alors..

    Bon, acceptons...

    Je réagis parce que simplement cette référence aux bibliothèques de grands nombres, on la voit fleurir partout (et comme par hasard très souvent durant le premier trimestre scolaire), et que l'utilité de travailler sur des très grand snombres sans pouvoir changer d'échelle est... extrêmement restreinte à la recherche pure.. ou à la crypto..


    Mon esprit de physicien s'insurge contre une telle "fausse propagande" qui entre dans les têtes, et fait utiliser un bulldozer géant pour écraser un bébé-mouche... (sans se poser aucune question)



    PS: et utiliser des logs, c'est pas possible ???
    PPS: j'ai quand même un peu de mal... Si je me souviens bien, il y a une formule.. On doit donc pouvoir exprimer un nombre premier en fonction du précédent, non ?? (même à un modulo près)
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  17. #17
    Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 13
    Points : 3
    Points
    3
    Par défaut
    @souviron34

    Oui, il y a effectivement un truc avec le modulo.

    Mais dit-moi, tu as vraiment observé on attrait pour la manip de grands nombres? Tu as une explication?

  18. #18
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Hie,

    Désolé pour souviron34, il n'y a pas qu'en cryptographie qu'on utilise de très grands nombres, avec de nombreux chiffres significatifs (pour les nombres entiers, il faut qu'ils soient toujours exacts).

    Les matheux, par exemple, en ont souvent besoin.
    Si les cons volaient, il ferait nuit à midi.

  19. #19
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Joe,
    Citation Envoyé par jouana Voir le message
    Pour ne pas avoir de limite sur tes nombres il te reste les chaines de caractères.
    Pour apprendre comment faire les calculs multi-précision, c'est éventuellement acceptable.

    Mais pour une utilisation efficace, il faut utiliser une bibliothèque suffisamment optimisée.

    Il y a GMP par exemple.

    On peut aussi en développer une, mais c'est déjà en soi un boulot non négligeable.
    Si les cons volaient, il ferait nuit à midi.

  20. #20
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Un nombre premier est, par définition, entier.
    Alors c'est tout simple. Depuis quelques dizaines d'années, dans un ordinateur, tout est stocké sous forme binaire. En Fortran, on peut déclarer des variables qui occuperont 1, 2, 4 ou 8 octets, c'est-à-dire 7, 15, 31 ou 63 bits, un bit étant dans tous les cas réservé pour le signe. Les valeurs maximales seront donc 127, 32767, 2147483647 ou 9223372036854775807. Si l'on veut travailler avec des nombres plus grands, il suffit de les stocker dans un plus grand nombre d'octets. Mais alors, il faut écrire soi-même les sous-programmes qui effectueront les opérations arithmétiques élémentaires avec de tels nombres.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Précisions sur les variables Source de données
    Par =JBO= dans le forum Contribuez
    Réponses: 1
    Dernier message: 28/04/2011, 16h15
  2. Timer haute précision
    Par chris069 dans le forum C++
    Réponses: 3
    Dernier message: 29/04/2009, 15h53
  3. [PHP-JS] Précision sur le passage de variables
    Par tintin72 dans le forum Langage
    Réponses: 1
    Dernier message: 31/05/2007, 08h55
  4. Précision sur .bashrc et variable PS1
    Par zyongh dans le forum Debian
    Réponses: 6
    Dernier message: 21/04/2007, 19h21
  5. [Source] Comment arrondir un nombre avec une précision variable
    Par OhMonBato dans le forum Vos contributions VB6
    Réponses: 2
    Dernier message: 31/03/2007, 12h44

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