lib GMP test while/if

lib GMP test while/if - C - Programmation

Marsh Posté le 19-05-2008 à 09:57:51    

Bonjour,
 
j'utilise la librairie GMP pour les grands nombres, mais je n'arrive pas à faire de test sur mes variables..
par exemple :  
 
 
max fixé à 13, et i à 2
 
while(i < max){
mpz_add(i, i, un);
}
 
le test (i < max) est tjrs validé alors que i devient bien plus grand que max
 
Comment ça marche ?
 
merci d'avance
 
Mon programme (très simple)

Code :
  1. int main (int argc, char **argv){
  2.   mpz_t nb, deux, un, max, i;
  3.   int o;
  4.   /* Initialize variables */
  5.   mpz_init (nb);
  6.   mpz_init (un);
  7.   mpz_init (deux);
  8.   mpz_init (max);
  9.   mpz_init (i);
  10.   /* Assign a and b from base 10 strings in argv */
  11.   mpz_set_str (nb, argv[1], 10);
  12.   mpz_set_str (un, "1", 10);
  13.   mpz_set_str (deux, "2", 10);
  14.   mpz_set_str (i, "2", 10);
  15.  
  16.   mpz_cdiv_q (max, nb, deux); // max = nb/2
  17.   while(i != max){
  18.     mpz_add(i, i, un);
  19.     gmp_printf ("%Zd * - * ", i);
  20.     gmp_printf ("%Zd\n", max);
  21.     if (i < max){
  22.       printf("ça doit marcher" );
  23.     }else{
  24.       printf("ça ne doit pas marcher" );
  25.     }
  26.   scanf("%d", &o);
  27.   }
  28.   /* Print all in decimal */
  29.   gmp_printf ("%Zd\n", nb);
  30.   gmp_printf ("%Zd\n", max);
  31.   /* Clear out variables */
  32.   mpz_clear (nb);
  33.   mpz_clear (deux);
  34.   mpz_clear (max);
  35.   mpz_clear (i);
  36.   return 0;
  37. }

Reply

Marsh Posté le 19-05-2008 à 09:57:51   

Reply

Marsh Posté le 19-05-2008 à 10:02:23    

Reply

Marsh Posté le 20-05-2008 à 13:43:49    

Merci bien.

Reply

Marsh Posté le 28-05-2008 à 23:02:54    

Salut,

 

je réutilise mon poste car j'ai une question certainement simple sur l'utilisation de :
void mpz_cdiv_r (mpz_t r, mpz_t n, mpz_t d);

 

en fait, mon reste r retourné est négatif, or un reste est positif :/

 

par exemple :

 
Code :
  1. gmp_printf ("a = %Zd\n", a);
  2. gmp_printf ("nb = %Zd\n", nb);
  3. gmp_printf ("reste = %Zd\n\n", reste);
  4. mpz_cdiv_r (reste, a, nb);
  5. gmp_printf ("a = %Zd\n", a);
  6. gmp_printf ("nb = %Zd\n", nb);
  7. gmp_printf ("reste = %Zd\n", reste);
 

retourne :

 


a = 1628413597910449
nb = 19
reste = 1

 

a = 1628413597910449
nb = 19
reste = -18

 

c'est pourtant simple, je ne vois pas comment simplifier encore plus mon probleme .. si vous avez une idée n'hésitez pas! merci

 


Message édité par soad0188 le 28-05-2008 à 23:03:23
Reply

Sujets relatifs:

Leave a Replay

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