Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
711 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] comment faire pour stocké un nombre enorme ?

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C] comment faire pour stocké un nombre enorme ?

n°228200
minours666
Posté le 15-10-2002 à 15:16:39  profilanswer
 

je doit faire un prog qui incremente a en fonction de c 2 valeurs precedente tel que a=a(n-1)+a(n-2)
 
ex:0,1,1,2,3,5,8,13....
 
 
mais arriver un moment ma variable est tellement enorme que mon prog tourne plus :/

mood
Publicité
Posté le 15-10-2002 à 15:16:39  profilanswer
 

n°228201
[SDF]Poire
Vive Grumly
Posté le 15-10-2002 à 15:17:47  profilanswer
 

Tableau de char
ou class BigInt
Fo recoder les opérations quoi :D


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°228206
BENB
100% Lux.
Posté le 15-10-2002 à 15:27:10  profilanswer
 

OU change de langage... python par exemple

n°228208
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-10-2002 à 15:30:13  profilanswer
 

__int64 si t'es sous C++Builder :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°228214
kadreg
profil: Utilisateur
Posté le 15-10-2002 à 15:34:08  profilanswer
 

Ou tu utilises une bibliothèque pour gérer les grands nombres :
 
http://www.swox.com/gmp/


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°228219
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 15:41:33  profilanswer
 

minours666 a écrit a écrit :

je doit faire un prog qui incremente a en fonction de c 2 valeurs precedente tel que a=a(n-1)+a(n-2)
 
ex:0,1,1,2,3,5,8,13....
 
 
mais arriver un moment ma variable est tellement enorme que mon prog tourne plus :/
 




 
a lala, fibonacci. t'en fout, c'est sans doute pas le but de ton tp.


---------------
du bon usage de rand [C] / [C++]
n°228222
minours666
Posté le 15-10-2002 à 15:45:39  profilanswer
 

Taz@PPC a écrit a écrit :

 
 
a lala, fibonacci. t'en fout, c'est sans doute pas le but de ton tp.




 
de koi pas le but ?  :)

n°228225
minours666
Posté le 15-10-2002 à 15:47:16  profilanswer
 

kadreg a écrit a écrit :

Ou tu utilises une bibliothèque pour gérer les grands nombres :
 
http://www.swox.com/gmp/




 
tu m'interresses mais je debute en prog alors je c pas trop comment faire si tu pouvais detailé un peu ;)
 
merci  :jap:

n°228226
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 15-10-2002 à 15:49:18  profilanswer
 

c du Fibonacci ça dis moi !
 
Grand genre quoi comme nb ?
à part un tableau je vois pas grand chose de pratique  
Surtout que tu auras juste à recoder le '+', donc ça reste super jouable !


---------------
Tout cul tendu mérite son dû
n°228227
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 15-10-2002 à 15:51:45  profilanswer
 

minours666 a écrit a écrit :

je doit faire un prog qui incremente a en fonction de c 2 valeurs precedente tel que a=a(n-1)+a(n-2)
 
ex:0,1,1,2,3,5,8,13....
 
 
mais arriver un moment ma variable est tellement enorme que mon prog tourne plus :/
 



je me reprends.. la vraie suite de Fibonacci commence ainsi => 1, 2, 3, 5, 8, 13, 21,...
 
Dans Fibonacci il n'y a pas de 0 ni de redoublement du 1 !
En tout cas, c'est pour moi la suite la plus "parfaite" et plus extraordinaire qui puisse exister !


---------------
Tout cul tendu mérite son dû
mood
Publicité
Posté le 15-10-2002 à 15:51:45  profilanswer
 

n°228231
BENB
100% Lux.
Posté le 15-10-2002 à 16:00:11  profilanswer
 

BeTtASpLeNdEnS a écrit a écrit :

je me reprends.. la vraie suite de Fibonacci commence ainsi => 1, 2, 3, 5, 8, 13, 21,...
 
Dans Fibonacci il n'y a pas de 0 ni de redoublement du 1 !
En tout cas, c'est pour moi la suite la plus "parfaite" et plus extraordinaire qui puisse exister !
 




Oui mais par extention toutes les suites doublement recurentes du type
Un+1 = A.Un + B.Un-1 sont aussi appellées suites de Fibonacci...

n°228232
minours666
Posté le 15-10-2002 à 16:00:57  profilanswer
 

BeTtASpLeNdEnS a écrit a écrit :

c du Fibonacci ça dis moi !
 
Grand genre quoi comme nb ?
à part un tableau je vois pas grand chose de pratique  
Surtout que tu auras juste à recoder le '+', donc ça reste super jouable !
 




 
ben je dois faire ca 10000 fois donc ca monte tres haut  :D  
et moin je merde ds le 50 soit 701408733,1134903170 ,1836311903...
je suis pas arriver a 10000  :lol:  

n°228233
kadreg
profil: Utilisateur
Posté le 15-10-2002 à 16:01:26  profilanswer
 

minours666 a écrit a écrit :

 
 
ben je dois faire ca 10000 fois donc ca monte tres haut  :D  
et moin je merde ds le 50 soit 701408733,1134903170 ,1836311903...
je suis pas arriver a 10000  :lol:    




 
Tu as un bug, ça monte trop vite


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°228236
kadreg
profil: Utilisateur
Posté le 15-10-2002 à 16:04:08  profilanswer
 

kadreg a écrit a écrit :

 
Tu as un bug, ça monte trop vite




 
J'ai rien dit ...
 
http://math.holycross.edu/~davids/ [...] b0-99.html


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°228242
BENB
100% Lux.
Posté le 15-10-2002 à 16:09:11  profilanswer
 

T'es sur que c'est pas plutot les nombres inferieurs à 10000 ?

n°228243
minours666
Posté le 15-10-2002 à 16:10:05  profilanswer
 

BENB a écrit a écrit :

T'es sur que c'est pas plutot les nombres inferieurs à 10000 ?




 
certain ;)

n°228256
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-10-2002 à 16:32:19  profilanswer
 

suffirait d'utiliser des doubles, c'est jusqu'à 10e308
ou long double, 10e4932 :D


Message édité par antp le 15-10-2002 à 16:33:37

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°228262
minours666
Posté le 15-10-2002 à 16:42:48  profilanswer
 

2164 =   49066023051546258144270123954378957778492061276292174042724767207031652084134733055160830762397655966379920628530901794087762582726440720900227917415976432756306226813280395950785480264809573184930628213940329674208142686110843687052307676080365098339609609208912025055112308327531831645383789136083199481039737545907055621979265374508202611355695687221614481127337858393851133177067668163219825288193320120711778528329411687417160835104884787443994242

n°228272
BENB
100% Lux.
Posté le 15-10-2002 à 16:54:22  profilanswer
 

minours666 a écrit a écrit :

 
 
certain ;)




 
Et quelle precision doit-tu avoir ?
 
Ce calcul me parait utopique...
 
Fib(n) = (1/sqrt(5))*(pow(phi1,n)-pow(phi2,n))
 
avec phi1 = (1+sqrt(5))/2
et phi2 = (1-sqrt(5))/2
 
essai d'elever à la puissance 10 000 !
 

n°228274
lorill
Posté le 15-10-2002 à 16:55:59  profilanswer
 

BENB a écrit a écrit :

 
avec phi1 = (1+sqrt(5))/2




oh, le nombre d'or !

n°228278
minours666
Posté le 15-10-2002 à 17:00:30  profilanswer
 

precis de chez precis  :D  
 
je comprend pas qd je mettre un long double ca compile bien mais l'exe plante :/

n°228289
BENB
100% Lux.
Posté le 15-10-2002 à 17:09:32  profilanswer
 

minours666 a écrit a écrit :

precis de chez precis  :D  
 
je comprend pas qd je mettre un long double ca compile bien mais l'exe plante :/




 
Avec un flottant tu n'aurra qu'une approximation :
 
f(1474)= 4.99225460548e+307
 
limite max d'un double, or la deja en double j'ai quoi quinze decimales sur les 307...
 
Avec un long double tu en aurras au mieux trente... :sarcastic:
sur les 2090 que compte F(10000)...
 
Et encore en passant par la formule de Binet, parce que sinon les erreurs d'arrondis se cumulant... aucune chance d'arriver au resultat...
 
A ce propos F(10000) = 3.3644764876460576 e2089
 
donc un long double devrait le contenir...


Message édité par BENB le 15-10-2002 à 17:19:42
n°228305
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 17:24:28  profilanswer
 

minours666 a écrit a écrit :

 
 
de koi pas le but ?  :)  




 
et bien vu comme ton code est catastrophique, je pense que le but n'est pas de concevoir une structure de donnée pour stocker des réels/grands entiers, mais bien de faire une fonction récursive.
 
tu dis vouloir calculer fibonacci(10000), cd n'est pas la peine de chercher comment le stocker, tu n'arriveras pas à le calculer: la complexité est exponentielle avec cette version récursive, et en ce qui concerne les appels recursifs, c'est pire!


---------------
du bon usage de rand [C] / [C++]
n°228309
BENB
100% Lux.
Posté le 15-10-2002 à 17:33:25  profilanswer
 

Taz@PPC a écrit a écrit :

 
 
et bien vu comme ton code est catastrophique, je pense que le but n'est pas de concevoir une structure de donnée pour stocker des réels/grands entiers, mais bien de faire une fonction récursive.
 
tu dis vouloir calculer fibonacci(10000), cd n'est pas la peine de chercher comment le stocker, tu n'arriveras pas à le calculer: la complexité est exponentielle avec cette version récursive, et en ce qui concerne les appels recursifs, c'est pire!  




 
Pour l'instant il n'a pas donné le moindre code !
 
comment sais-tu qu'il envisage un code recursif ?
 
Pour la methode c'est clair qu'il faut faire une boucle sur des entiers.
 
sinon par la formule de binet en long double
 
ou alors ruser en double...
en passant par des logs...

n°228313
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 17:47:22  profilanswer
 

BENB a écrit a écrit :

 
 
Pour l'instant il n'a pas donné le moindre code !
 
comment sais-tu qu'il envisage un code recursif ?
 
Pour la methode c'est clair qu'il faut faire une boucle sur des entiers.
 
sinon par la formule de binet en long double
 
ou alors ruser en double...
en passant par des logs...




Citation :

je doit faire un prog qui incremente a en fonction de c 2 valeurs precedente tel que a=a(n-1)+a(n-2)


 
cette définition le laisse fortement suggéré


---------------
du bon usage de rand [C] / [C++]
n°228355
Carbon_14
Posté le 15-10-2002 à 18:41:18  profilanswer
 

En stockant les digits dans une chaîne de caractères comme on les écrit à la main sur feuille de papier ?
 
En conservant la chaîne dans l'ordre digit de poids faible -> digit de poids fort, ça facilite la gestion d'allongement de chaîne. On la retourne à la fin (fonction strrev, ou à la main).
 
L'addition est pas trop difficile (ajout de chiffres et retenue comme appris à l'école). Faut juste conserver les n-1 et n-2.

n°228362
minours666
Posté le 15-10-2002 à 19:39:00  profilanswer
 

ben le code code marche tres bien qd je le fais marcher pour des chiffre jusqu'a 40 mais passé c marche plus normal mes variables sont des int mais qd je met double ou long double ca plante litteralement :(


Message édité par minours666 le 15-10-2002 à 19:45:03
n°228365
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 19:50:28  profilanswer
 

tu vas pouvoir aller à 41 si tu passes en unsigned!  :D


---------------
du bon usage de rand [C] / [C++]
n°228367
minours666
Posté le 15-10-2002 à 19:51:55  profilanswer
 

je n'en doute pas mais aurai tu au moins une reponse a m'apporter ?

n°228372
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 19:58:06  profilanswer
 

ben, il faut faire une approche objetet définir un ADT GrandNombre. si j'ai un peu de temps, je le ferai ce soir.
 
 
la solution de stocker la répresentation d'un nombre dans un char* / un chiffre ascii par char est effectivement une tres bonne idée. si tu ne trouves pas de librairies qui le fassent, au boulot!


---------------
du bon usage de rand [C] / [C++]
n°228375
chrisbk
-
Posté le 15-10-2002 à 19:59:43  profilanswer
 

antp a écrit a écrit :

__int64 si t'es sous C++Builder :D




 
marche aussi sous visu :D

n°228383
Kristoph
Posté le 15-10-2002 à 20:20:38  profilanswer
 

Je confirme, fais ca en Python
 
Je viens de faire le test et voici le resultat :
>>> f(2)
2
>>> f(10000)
54438373113565281338734260993750380135389184554695967026247715841208582865622349017083051547938960541173822675978026317384359584751116241439174702642959169925586334117906063048089793531476108466259072759367899150677960088306597966641965824937721800381441158841042480997984696487375337180028163763317781927941101369262750979509800713596718023814710669912644214775254478587674568963808002962265133111359929762726679441400101575800043510777465935805362502461707918059226414679005690752321895868142367849593880756423483754386342639635970733756260098962462668746112041739819404875062443709868654315626847186195620146126642232711815040367018825205314845875817193533529827837800351902529239517836689467661917953884712441028463935449484614450778762529520961887597272889220768537396475869543159172434537193611263743926337313005896167248051737986306368115003088396749587102619524631352447499505204198305187168321623283859794627245919771454628218399695789223798912199431775469705216131081096559950638297261253848242007897109054754028438149611930465061866170122983288964352733750792786069444761853525144421077928045979904561298129423809156055033032338919609162236698759922782923191896688017718575555520994653320128446502371153715141749290913104897203455577507196645425232862022019506091483585223882711016708433051169942115775151255510251655931888164048344129557038825477521111577395780115868397072602565614824956460538700280331311861485399805397031555727529693399586079850381581446276433858828529535803424850845426446471681531001533180479567436396815653326152509571127480411928196022148849148284389124178520174507305538928717857923509417743383331506898239354421988805429332440371194867215543576548565499134519271098919802665184564927827827212957649240235507595558205647569365394873317659000206373126570643509709482649710038733517477713403319028105575667931789470024118803094604034362953471997461392274791549730356412633074230824051999996101549784667340458326852960388301120765629245998136251652347093963049734046445106365304163630823669242257761468288461791843224793434406079917883360676846711185597501L
 
PS: c'était super rapide a calculer, si si.
 
PPS: A le plaisir de flooder horizontalement le forum ;)

n°228387
antp
Super Administrateur
Champion des excuses bidons
Posté le 15-10-2002 à 20:32:50  profilanswer
 

:ouch:  
 
va falloir que je mette à Python moi :)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°228398
Kristoph
Posté le 15-10-2002 à 21:06:03  profilanswer
 

Moins d'une demi seconde sur un Athlon XP 1800. Faut aussi voir que l'interpreteur n'a pas grand chose à faire et que le coeur du travail viens de la lib de nombres a grande precision.

n°228422
Taz@PPC
saloperie de i=`expr $i + 1`;
Posté le 15-10-2002 à 22:14:23  profilanswer
 

Kristoph a écrit a écrit :

Moins d'une demi seconde sur un Athlon XP 1800. Faut aussi voir que l'interpreteur n'a pas grand chose à faire et que le coeur du travail viens de la lib de nombres a grande precision.




 
qui est en C


---------------
du bon usage de rand [C] / [C++]
n°228711
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 16-10-2002 à 14:20:24  profilanswer
 

Juste pour faire une petite remarque par rapport à une reflexion lue plus haut !
 
=> qq'un a parlé de nombres en "float", etc...
La théorie des nombres, et toutes les suites sur des entiers n'ont pas pour intéret un ordre de grandeur, mais LE NOMBRE ENTIER précis !!!
à la rigueur, c'est peut etre plus le dernier chiffre (celui des unités) qui est intéressant dans tout ça !
 
Donc... on va pas s'amuser à travailler avec des décimaux ! ici ce sont les entiers qui sont les rois !
 
Faudrait que j'essaie de coder cette suite tiens.. ça peut être intéressant !


---------------
Tout cul tendu mérite son dû
n°228758
darkoli
Le Petit Dinosaure Bleu
Posté le 16-10-2002 à 15:52:22  profilanswer
 

Voilà je viens de faire le prog en C (completement avec l'addition et l'affichage du nombre ...).
 
Et j'obtiens pour f(10000) :
 
Dans 3 secondes je mets le resulats car l fichier complet des fibos de 0 à 10000 fait 10Mo :d


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°228765
darkoli
Le Petit Dinosaure Bleu
Posté le 16-10-2002 à 16:07:57  profilanswer
 

F(10000) = 33644764876431783266621612005107543310302148460680063906564769974680081442166662368155595513633734025582065332680836159373734790483865268263040892463056431887354544369559827491606602099884183933864652731300088830269235673613135117579297437854413752130520504347701602264758318906527890855154366159582987279682987510631200575428783453215515103870818298969791613127856265033195487140214287532698187962046936097879900350962302291026368131493195275630227837628441540360584402572114334961180023091208287046088923962328835461505776583271252546093591128203925285393434620904245248929403901706233888991085841065183173360437470737908552631764325733993712871937587746897479926305837065742830161637408969178426378624212835258112820516370298089332099905707920064367426202389783111470054074998459250360633560933883831923386783056136435351892133279732908133732642652633989763922723407882928177953580570993691049175470808931841056146322338217465637321248226383092103297701648054726243842374862411453093812206564914032751086643394517512161526545361333111314042436854805106765843493523836959653428071768775328348234345557366719731392746273629108210679280784718035329131176778924659089938635459327894523777674406192240337638674004021330343297496902028328145933418826817683893072003634795623117103101291953169794607632737589253530772552375943788434504067715555779056450443016640119462580972216729758615026968443146952034614932291105970676243268515992834709891284706740862008587135016260312071903172086094081298321581077282076353186624611278245537208532365305775956430072517744315051539600905168603220349163222640885248852433158051534849622434848299380905070483482449327453732624567755879089187190803662058009594743150052402532709746995318770724376825907419939632265984147498193609285223945039707165443156421328157688908058783183404917434556270520223564846495196112460268313970975069382648706613264507665074611512677522748621598642530711298441182622661057163515069260029861704945425047491378115154139941550671256271197133252763631939606902895650288268608362241082050562430701794976171121233066073310059947366875
 
Avec F(0)=0, F(1)=1, F(2)=1, F(3)=2, ...
 
Il y a 2090 chiffres ...


Message édité par darkoli le 16-10-2002 à 16:52:00

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°228774
ZeT
Ze Eternal Thrasher! 1st class
Posté le 16-10-2002 à 16:28:52  profilanswer
 

Kristoph et DarkOli mettez vous d'accord, vous n'avez pas les même resultats  :o


Message édité par ZeT le 16-10-2002 à 16:29:11
n°228778
antp
Super Administrateur
Champion des excuses bidons
Posté le 16-10-2002 à 16:31:01  profilanswer
 
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] comment faire pour stocké un nombre enorme ?

 

Sujets relatifs
[C] Compter le nombre de chiffres dans un nombre![C] afficher un nombre en base 2
UNIX Scheme... faire un algo qui dit si un nombre est premier[C/C++] Générer un nombre premier à 30 chiffres
[PHP]limiter le nombre de reponse (forum) par page...[PHP-MySQL] Compter le nombre d'occurences d'une valeur.
[ORACLE] Suppression gd nombre enregistrements[C++] Nombre d'éléments d'un tableau dynamique ???
Calcul du nombre de jours entre 2 datesnombre d'objet ds un doc XML (avec un parseur de type DOM)
Plus de sujets relatifs à : [C] comment faire pour stocké un nombre enorme ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR