CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C/pascal]Manipuler de très grand nombre

navetdesalpes3
navetdesalpes3
Niveau 10
26 mars 2008 à 17:41:52

J'essaie ed faire un programme travaillant sur les nombres de repunit(repunit de x c'est x 1 mis cote a cote, soit repunit de 6=111111)
Donc je me retrouve très vite a manipuler des nombres imenses et je chercher un language simple (ou une ruse^^) qui me permettrait de manipuler des nombres de l'ordre de 10^10^5 (un nombre a 100000 chiffres en gros)
j'ai quelques notions en c et en pascal c'est pour ça que je me penche plutot vers ces langages, mais si qq'un pourrait me renseigner sur un moyen de manipuler de très grand nombre.

En fait j'ai d'abord penser a utiliser maple, mais maple étant écrit lui même en C on se retrouve avec un langage plutot loin du langage machine, ce qui donne rapidement des temps de calcule colossaux comparés a des langages de type C/Pascal et je me retrouve avec es temps de calculs de plusieurs jours.

Donc existe t-il des moyens "simples" de manipuler de très très grand nombre?

guyver2
guyver2
Niveau 10
26 mars 2008 à 17:49:25

la question a été abordée il y a peu dans un topic similaire.
https://www.jeuxvideo.com/forums/1-47-38636-1-0-26-0-0.htm

je pense que godrik y a répondu quelquechose de pertinent vu que la personne n'est pas revenue demander de l'aide (ni dire merci d'ailleur)

navetdesalpes3
navetdesalpes3
Niveau 10
26 mars 2008 à 18:24:17

ouai c'était moi :rouge:
J'ai fini par travailler sur des extended en pascal, et pour le pas de merci c'est dû au fait que je suis pas repassé après 3 jours :rouge:
Enfin avec 64bits je reste quand même bloqué a 10^20, et les extended monte jusqu'a un peu moins que 10^500 je crois, soit des nombres énormes, qui me suffise en générale mais pas là

guyver2
guyver2
Niveau 10
26 mars 2008 à 19:22:38

en fait je n'avais meme pas remarqué que c'etait toi dans les deux topics...
alors vu que tu accepte de coder en C tu devrais (je repete ce qu'a dit godrik) aller voir http://gmplib.org/
ça accepte les nombres de taille arbitraire.
petit exemple avec 10^10000
http://gmplib.org/cgi-binin/gmp_calc.pl?expr=10%5E10000
mais comme dit plus haut il n'y a pas de limite

sinon il me semble que le langage ruby gere aussi les nombres de tailles arbitraires. Apres un petit test dans irb, il semble qu'il y ai quand meme une limite.
irb(main):005:0> 10**100000
est accepté (bon je te passe l'affichage du resultat)
par contre
irb(main):005:0> 10**1000000
(irb):5: warning: in a**b, b may be too big
=> Infinity

navetdesalpes3
navetdesalpes3
Niveau 10
26 mars 2008 à 19:55:42

Merci beaucoup, il semblerait en effet que le ruby soit le language le plus adapté

dnob700
dnob700
Niveau 10
26 mars 2008 à 23:07:30

quitte à prendre un langage de très haut niveau, utilise maple. Au moins, il est prévu pour ça. Et même s'il n'est pas excessivement rapide (par rapport à GMP par exemple), çe ne sera pas pire que ruby je pense (même si je ne connais pas).

Un autre langage qui a des grands nombres de base dans sa bibliothèque standard c'est OCaml d'ailleurs.

navetdesalpes3
navetdesalpes3
Niveau 10
27 mars 2008 à 20:33:38

J'utilise maple, ça avance pas, cela dit je viens de voir que le ruby est encore plus lent^^
Donc bon j'apprend le C là de toutes façon le C est tellement utiliser que l'apprendre n'est pas une perte de temps.

merci de vos conseils

Kaoron
Kaoron
Niveau 9
28 mars 2008 à 08:07:35

Typiquement, tu ne peux pas rapidement utiliser d'entiers supérieurs à X bits, X étant la taille maximale d'un entier en mémoire. Le truc pour gérer des entiers de taille arbitraire, c'est d'utiliser une structure de données de taille dynamique (liste), et là tu n'as plus un acces direct à la valeur de ton entier, donc c'est plus lent.
Tu peux tenter d'optimiser les performances de ton programme avec tel ou tel langage plus rapide (tu crées une structure de type liste, tu définis des opérations pour les manipuler, et pof t'as des entiers de taille arbitraire limités seulement par ta mémoire!), mais dans ce cas, c'est la nature même de la représentation en machine de ton problème qui rend sa résolution plus lente qu'un problème classique.

JujuDredd
JujuDredd
Niveau 10
29 mars 2008 à 11:52:33

Avec LCC, y'a une bibliothèque pour gérer des entiers de très grande taille.

navetdesalpes3
navetdesalpes3
Niveau 10
29 mars 2008 à 18:52:19

Ouai j'ai un peu regarder tout ça, et globalement les entiers de très grandes prennent un temps monstre, et finalement maple est le plus rapide pour travailler sur de très grand entiers

M'enfin j'ai quand même réussi a faire mon programme, en optant finalement pour une analyse sur le papier et la découverte d'une feinte^^

Djinn42
Djinn42
Niveau 7
26 octobre 2009 à 00:38:12

Un autre moyen simple d'augmenter tes possibilités de calcul c'est d'utiliser les propriétés algébriques des répunits.

J'imagine que c'est le genre de phrase que disent tous les mathématiciens à tous les informaticiens. ^^

Djinn42
Djinn42
Niveau 7
26 octobre 2009 à 00:43:16

Tout dépend ce que tu veux faire avec les répunits.
Du calcul brut ? Les décomposer ou montrer leur primalité ?

Tu as un DM à rendre ?

Oups, je viens de voir que le post date d'il y a longtemps...
Je faisait une recherche sur les répunits via Google, c'est marrant que je me soit retrouvé sur le site que je visite quasiment le plus souvent.
Mince, si mes recherches sérieuses m'amènent aussi ici c'est fort.

dnob700
dnob700
Niveau 10
26 octobre 2009 à 10:05:36

D'un point de vue plus "théorique", pour répondre au mathématiciens. Un résultat intéressant c'est que pour faire des manipulations arbitraires, les repunit sont les pires nombres qui soit.

Bien sûr pour certains calculs simples on peut imaginer qu'ils soient trivialisables par les propriété des repunit. Mais très vite on va obtenir un nombre "quelconque", mais qui aura toujours une propriété : celle d'avoir énormément de '1' dans son écriture binaire. Or il y a beaucoup d'algorithme (typiquement les manipulations sur les BDD ou les ZDD) qui sont capables de traiter très rapidement des entiers "creux" (avec très peu de 1), mais je crois que rien de tout ça ne fonctionne aussi bien sur des entiers qui ont la propriété inverse (mais c'est "expérimental", pas mathématique comme résultat).

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment