gmp et les grands nombres :(

gmp et les grands nombres :( - C++ - Programmation

Marsh Posté le 11-05-2004 à 15:32:31    

Yep @ tous,  
 
J'ai un programme à faire en C++ avec la bibliothéques gmp, sous linux avec compilateur g++ (pour la gestion des grands nombres 512, 1024 bits) et je suis coincé !
 
Voilà je dois faire des calculs (racine carré) sur des nombres de 513 bits  pour etre précis et je suis incapable de faire un simple sqrt(n) avec gmp ou "n" est mon nombre de 513 bits !
 
Alors s'il y a une personne qui peux m'aider, merci d'avance !
De même, impossible d'utiliser la fonction floor, toujours avec gmp, donc A L'AIDE Please  :bounce:  
 
Merci beaucoup !

Reply

Marsh Posté le 11-05-2004 à 15:32:31   

Reply

Marsh Posté le 11-05-2004 à 15:37:35    

Reply

Marsh Posté le 11-05-2004 à 15:45:31    

ok merci de je n'y arrive toujours pas ( newbie !) donc de façon plus concrete, je dois definir un entier grand et prendre sa racine carré, comment faire ?
Merci encore, mais un exemple vaut mieux pour moi que des tonnes de HOWTO !

Reply

Marsh Posté le 11-05-2004 à 15:53:27    

Mais pourquoi n'utilise tu pas les double ?
Car ça correspond à peu près à 1024 bits :
1.7976931348623158e+308

Reply

Marsh Posté le 11-05-2004 à 15:54:27    

sa ne passe pas car je dois l'elever au carré, donc je suis obliger d'utiliser gmp :(

Reply

Marsh Posté le 11-05-2004 à 16:38:00    

Quelqu'un peut il m'aider pour GMP, je suis en pleine galére !!!
Please ;)
P.S : Penser qu'un jour aussi vous avez été newbie dans un domaine....non ?

Reply

Marsh Posté le 11-05-2004 à 16:40:14    

J'ai pas GMP ici. Ce soir, si je suis pas trop désespéré, je ponderais une ligne :o

Reply

Marsh Posté le 11-05-2004 à 16:46:53    

Merci !

Reply

Marsh Posté le 11-05-2004 à 17:06:27    

Si tu as le temps kadreg,
mon nombre fait 513 bits soit 155 chiffres, donc essayes de prendre un nombre similaire, car j'ai l'impression que mon plantage viens de la taille de mon nombre, non geré par gmp, ou plutôt g++, mon compilateur !
Encore Merci à toi.

Reply

Marsh Posté le 11-05-2004 à 18:29:01    

Reply

Marsh Posté le 11-05-2004 à 18:29:01   

Reply

Marsh Posté le 11-05-2004 à 21:02:27    

Code :
  1. #include <stdio.h>
  2. #include <gmp.h>
  3. int main () {
  4.   mpf_t number;
  5.   mpf_t result;
  6.   mpf_init (number);
  7.   mpf_init (result);
  8.   mpf_set_str (number, "25465487912546548791254654879125465487912546548791254654879125465487912546548791254654879125465487912546548791254654879125465487912546548791254654879185631", 10);
  9.   mpf_sqrt (result, number);
  10.   mpf_out_str (NULL, 10, 255, result);
  11.   puts ("\n" );
  12.   return 0;
  13. }


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-05-2004 à 21:04:35    

puts ("\n" );  [:rofl]
 
sinon le wrapper C++ fait tout ça bien plus proprement

Reply

Marsh Posté le 11-05-2004 à 21:06:13    

Taz a écrit :

puts ("\n" );  [:rofl]


 
J'ai voulu glisser un fflush (stdin), mais j'ai pas eut l'occasion :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-05-2004 à 21:06:39    

Ah, merde, j'avais pas vu la cat. Tu nous fait le même en C++ ?


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 11-05-2004 à 21:12:31    

Code :
  1. #include <iostream>
  2. #include <gmpxx.h>
  3.  
  4.   int main () {
  5.       mpf_class number("25465487912546548791254654879125465487912546548791254654879125465487912546548791254654879125465487912546548791254654879125465487912546548791254654879185631", 10 /*bits de précision*/);
  6.       std::cout << sqrt(number) << '\n';
  7.   }

je pense. par contre ça saoule que y ait pas de namespace :o


Message édité par Taz le 11-05-2004 à 21:14:50
Reply

Marsh Posté le 11-05-2004 à 21:40:58    

Une question, car moi je croyais qu'il fallait utiliser endl, donc pourquoi '\n' ?

Reply

Marsh Posté le 11-05-2004 à 21:43:56    

vous êtes lourd là sérieux
 
le retour à la ligne sera toutjours '\n', et pas "\n" ou endl
 
 
endl c'est '\n' + flush :o

Reply

Marsh Posté le 11-05-2004 à 21:47:20    

mais on le voi partout ca (cour , tuto et autre)
 
on voit meme des cerr<<...<<endl; c'est pour dir :s

Reply

Marsh Posté le 11-05-2004 à 21:49:05    

vi, mais dans quel cas utiliser un simple '\n' ou endl ?

Reply

Marsh Posté le 11-05-2004 à 21:54:18    

cerr est pas bufferisé, aucun intérêt de flusher !
 
quand utilisé endl ? ben quand tu veux faire un retour à la ligne de flusher, sinon si tu veux juste un retour à la ligne, '\n' et basta


Message édité par Taz le 11-05-2004 à 21:54:36
Reply

Marsh Posté le 11-05-2004 à 21:55:48    

Merci

Reply

Marsh Posté le 11-05-2004 à 21:58:39    

Taz a écrit :

cerr est pas bufferisé, aucun intérêt de flusher !
 


 
ben c'est bien ce que je reproche, pourquoi yen a qui utilise endl avec cerr ? zon ka utilise clog, le but de cerr c'est d'etre sur que ce soit affiché

Reply

Marsh Posté le 12-05-2004 à 12:36:11    

Merci beaucoupe les gars pour toutes ces participations !!
C'est super cool :)
 
Juste une derniere question, comment assigner des variables, je m'explique :
On veux dire par exemple :
number2 = -2 * number * number ;
Comment le faire avec gmp si on n'a pas de valeurs chiffrées pour number, du genre c'est l'utilisateur qui le saisit !
car :
mpf_set_str (d,(b*b)-(4*n),10) ;
Ne marche pas par exemple.
 
Merci d'avance!
 
P.S : mpf_floor existe ?

Reply

Marsh Posté le 12-05-2004 à 13:25:41    

roule007 a écrit :


P.S : mpf_floor existe ?


 
On t'a filé suffisament de liens pour que tu puisse répondre. La première qualité d'un programmeur, c'est de chercher l'information.

Reply

Marsh Posté le 12-05-2004 à 13:58:49    

roule007 a écrit :


On veux dire par exemple :
number2 = -2 * number * number ;

et bien tu l'écris pareil

Reply

Marsh Posté le 12-05-2004 à 17:44:10    

Merci @ tous, grace à votre aide j'ai vachement pu avencer, mais toutefois,  
Question a laquelle je n'ai pas trouvée de réponse dans la doc   :
 
Y a t'il un moyen d'afficher nos nombres en complet non de la forme : 1.15792e+77
Est-ce que ça dépend du compilateur ou de la bibli et surtout comment faire ?
 
Encore merci !

Reply

Marsh Posté le 17-01-2005 à 16:04:37    

moi j'utilise NTL de Victor Shoup (www.shoup.net/ntl/). Vous sauriez me dire si c'est moins bien ou mieux que GMP ?  
Avantages/Inconvénients pour chaque librairie?
 
thx :)


Message édité par initial le 17-01-2005 à 16:05:08
Reply

Marsh Posté le 17-01-2005 à 17:27:54    

ben libntl est comment dire ... inconnue. Elle a l'air pas mauvaise (GPL) et l'interface à l'air correcte

Reply

Marsh Posté le 18-01-2005 à 15:51:16    

d'autres avis sur "Avantages/Inconvénients" pour chaque librairie (NTL et GMP) ?


Message édité par initial le 18-01-2005 à 15:51:38
Reply

Marsh Posté le 08-02-2005 à 16:05:51    

Après étude, il s'avère que :
GMP est dix fois plus rapide que NTL. Toutefois, GMP est un peu moins convivial et pratique que NTL. Enfin, GMP n'est pas adapté aux calculs trigonométriques (cos, sin, etc).  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed