Home
        La biblioth`eque GMP
         Contents
1.  2 5  complexit     On remarque que la d  croissance dans les entiers est l  g  rement plus rapide  que dans la version r  elle  gr  ce aux arrondis  Ceci permet d     tendre le r  sultat sur l    excellente convergence  de la m  thode de Newton    notre calcul dans les entiers     3  Impl  mentation et tests empiriques    Remarque 3 1  approximation grossi  re   Au d  but de l    algorithme IIL3 il faut choisir une valeur initiale  x tel que x     gt  y  Bien s  r on pourrait prendre x   y  mais pour acc  l  rer il vaut mieux choisir une valeur  proche de la racine 4 y mais bien entendu plus grande que celle ci  Il y a plusieurs m  thodes de le faire de  mani  re efficace  En s   inspirant de la recherche dichotomique on pourrait   crire      Integer x 1  while   puissance x n   lt  y   x  2   Il existe une variante plus rapide  qui profite du fait que l   entier y soit stock   en base 2  A  nsi il est facile  de d  terminer sa longueur      1    log gt   y    qui n   est rien d   autre que le nombre de chiffres binaires     int len  const Integer amp  y     return mpz_sizeinbase y get_mpz_t   2        int log2  const Integer amp  y     return len y    1      Ensuite on calcule ais  ment x   2  lllog2y  7    en syst  me binaire il ne s   agit que d   un d  calage     Integer x  Integer 2   lt  lt    log2 y  n       d  calage bit par bit  V  rifier que x    y tout en assurant x     gt  y  comme exig   dans l   algorithme  V  rifier que cette astuce  s applique   galement    l
2.  aux fonctions standard    1  2  3  4    xxx Attention      compiler avec g    lgmpxx   5  include  lt gmpxx h gt     acc  der    la biblioth  que gmp pour C     6 typedef mpz_class Integer     Integer semble plus parlant que gmp_class  7   8    int main      9 4   10 cout  lt  lt   Entrez deux entiers svp        11 Integer a  b    12 cin  gt  gt  a  gt  gt  b    13 cout  lt  lt   a     lt  lt  a  lt  lt  endl  lt  lt   b     lt  lt  b  lt  lt  endl  14  lt  lt   a b      lt  lt  a b  lt  lt  endl  lt  lt   a b      lt  lt  a b  lt  lt  endl  15  lt  lt   axb      lt  lt  axb  lt  lt  endl    16 if   b    0   cout  lt  lt   a b      lt  lt  a b  lt  lt  endl   17  lt  lt   a b      lt  lt  ab  lt  lt  endl    18 else cout  lt  lt   La division par z  ro n   est pas d  finie    lt  lt  endl   19      1 On acc  de    la biblioth  que GMP pour le C   en incluant la directive  include  lt gmpxx h gt   qui  effectue les d  clarations n  cessaires  Ensuite la compilation s   effectue avec l option  1gmpxx pour   tablir  le lien vers les d  finitions de cette biblioth  que  Sinon  le compilateur   mettra une longue liste d   erreurs   r  clamant undefined reference to       Comme vous voyez dans le programme III  1  nous avons renomm   la classe mpz_class en Integer    ce qui semble plus parlant  Si jamais vous voulez remplacer mpz_class par une future classe nouveau_modele   il suffit de modifier une seule ligne     condition  bien s  r  que nouveau modele impl  mente les entiers  
3.  la suite r  currente ug1    1   n z Lux   au   converge vers la  racine r      a  Pour k  gt  1 on a convergence monotone up N  r  Sym  triquement pour vk   alu ona  vx   r  On obtient ainsi des encadrements explicites vg  lt  r  lt  ux de plus en plus fins      vi Lva  lt V3 L e Kr  lt    lt  u3  lt u  lt  u       Ajoutons que pour ug proche de la racine r la convergence est exponentielle      chaque it  ration le  nombre de d  cimales valables double    peu pr  s  C   est la convergence exponentielle qui fait de ce th  or  me  un outil tr  s puissant   si vous avez calcul   un encadrement  vg  ug       1072 pr  s  disons  l   it  ration suivante  ne laissera qu   un   cart   1074  celle d   apr  s   1078  puis   1076 etc    Pour la racine ni  me enti  re d   un nombre naturel il reste    mettre en   uvre un algorithme qui donne le  r  sultat exact en n   utilisant que l   arithm  tique des nombres entiers  Pour ceci on imite la r  cursion ci dessus  en rempla  ant les nombres r  els par les entiers      Proposition 2 2  Soient y xo     Z4 deux entiers positifs  On d  finie une suite r  currente xx     Z4 par    Xr   L  Cr     1 xx    ya   n     On a alors le comportement suivant        Six   lt  y alors Xk41  gt  Xk       Six   gt  y alors xx41  lt  xx ma  s toujours  1  xx41    gt  y   On conclut qu une valeur initiale x    v  rifiant x   gt  y donne une suite initialement d  croissante  xo  gt  x   gt        ce  gt  Xk   1  gt  Xk  lt Xk          t que xk    y  est la va
4.  personne    se comporter d   une fa  on plus adapt  e    la machine  est souvent consid  r  e  avec raison  comme offensive   Bjarne Stroustrup  Le langage  C       Le but de ce paragraphe est de d  velopper une fonction qui soit capable de lire et d     valuer de telles    expressions  et qui soit raisonnablement commode    utiliser  Ceci n   introduit aucun nouveau concept  math  matique  il s   agit surtout d   un exercice de programmation     2 1  Notations  Il y a plusieurs conventions possibles pour l     criture d   une expression alg  brique   on  choisira ici le compromis d   une notation qui soit    la fois commode    utiliser et facile    programmer     Notation infixe  On est habitu      l     criture 10 00   949 qui correspond     107100  949 o   le sym   bole   repr  sente l   op  rateur de puissance  C   est ce que l   on appelle la notation infixe parce que  les op  rateurs binaires figurent entre leurs op  randes     Notation pr  fixe  Pour les fonctions on utilise traditionnellement la notation pr  fixe comme     a  ou  f x y   Ici la fonction pr  c  de les param  tres     Notation postfixe  Dans certains domaines math  matiques  comme la th  orie des groupes  on pr  f  re  la notation postfixe comme a  ou ag  C   est aussi le cas pour la factorielle n  o   le param  tre  pr  c  de la fonction       videmment toutes ces notations sont   quivalentes entre elles dans le sens que l   on peut traduire l   une     l   autre   au lieu d     crire  107100  949 en 
5.  s la fiabilit   et l    efficacit     la robustesse sera tr  s appr  ci  e par l   utilisateur     R  utilisabilit    Comme la programmation soigneuse n  cessite un investissement important  il convient    de r  utiliser  si possible  le code source d  j   d  velopp    Bien s  r on ne veut r  utiliser que de code  qui soit fiable  clair  et efficace  Si ces qualit  s sont satisfaites  tout programmeur appr  ciera la  possibilit   de s   en servir   Reconnaissons    ce propos que nous avons d  j   profit   des superbes  biblioth  ques STL et GMP   Pour un d  veloppement durable  il est donc important de pr  voir les  r  utilisations possibles dans d   autres contextes     Documentation  Pour qu   un logiciel soit utile dans un contexte plus large  l   utilisateur souhaitera une    documentation ind  pendante de l   impl  mentation  Elle s   adresse    l   utilisateur envisag    que ce  soit un programmeur qui r  utilise certaines composantes  ou un usager qui se sert du logiciel  comme application toute faite  Dans la pratique une utilisation    intuitive    et une documentation  de qualit   sont souvent cruciales     Il va sans dire qu   on devrait appliquer ces crit  res    tout logiciel  non seulement dans ce cours  Avouons    cependant que ces exigences draconiennes sont rarement satisfaites  soit par manque de temps  soit tout  simplement par n  gligence    En tenant compte des crit  res ci dessus  essayez de r  examiner et d   optimiser votre impl  mentation   Est elle 
6. Numbers have neither substance  nor meaning  nor qualities    They are nothing but marks  and all that is in them   we have put into them by the simple rule of straight succession   Hermann Weyl  1885   1955   Mathematics and the Laws of Nature    CHAPITRE III    La biblioth  que GMP    Ce chapitre pr  sente une solution    industrielle    du probl  me des grands entiers en C     la bi   blioth  que GMP  Par rapport    notre impl  mentation    faite maison    elle se distingue seulement par son  niveau d optimisation  une journ  e de programmation pour notre classe Naturel contre plusieurs ann  es  de d  veloppement pour la biblioth  que GMP    En contrepartie nous sommes oblig  s d   accepter une telle  biblioth  que comme une bo  te noire   on apprendra facilement son interface mais non son fonctionnement  int  rieur   Vous pouvez lire sa documentation en ligne si cela vous int  resse      Sommaire    1  Une impl  mentation    professionnelle    des nombres entiers  1 1  Avant propos  1 2  Les  entiers de la biblioth  que GMP  1 3  Exemple pratique   calcul de coefficients binomiaux     2    valuation d   expressions alg  briques  2 1  Notations  2 2    valuation en notation postfixe     1  Une impl  mentation    professionnelle    des nombres entiers    On discutera dans ce chapitre l   utilisation d   une classe Integer  issue de la biblioth  que GMP  GNU  Multiple Precision Library   qui mod  lise les    grands entiers     c   est    dire  les nombres entiers sans  limit
7. a recherche dichotomique  o   il faut trouver r s tels que r  lt  4 y  lt  s      Integer r  Integer 1   lt  lt    log2 y  n    s  r  lt  lt  1     d  calages bit par bit    Exercice P 3 2  Impl  menter la recherche dichotomique  algorithme TII 2  et la m  thode de Newton H  ron   algorithme II 3  afin de calculer   y  Ici y sera de type Integer  tandis que pour n le type int suffira    Pourquoi   Tester les deux fonctions sur des exemples de plus en plus grands   Il sera int  ressant de faire  afficher les   tapes interm  diaires du calcul   Les r  sultats sont ils identiques  comme il se doit      Exercice P 3 3  Comment d  terminer quelle m  thode est plus efficace   Comme la comparaison des co  ts  exacts s   av  re difficile  on fait recours aux tests empiriques         Calculer  Var  pour n   1     1000        Calculer  Var  pour n   1     1000   Vous pouvez mesurer le temps d   ex  cution avec le programme racine cc  Formulez vos observations   puis essayez d   en tirer une conclusion ou une r  gle heuristique pour choisir la meilleure m  thode     MAE 22 juin 2009    68    Projet IH     Calcul de la racine ni  me    4  Crit  res de qualit   d   un logiciel    En guise de conclusion  et afin de clarifier les termes  explicitons les qualit  s que l   on souhaiterait    de tout logiciel  Plus l   application envisag  e est importante  plus les crit  res suivants deviennent cruciaux   Pensez par exemple    un logiciel de pilotage d   un avion ou la conduite d   un m  tro 
8. ation de taille  Contrairement au chapitre pr  c  dent  nous ne tentons pas ici une impl  mentation nous   m  mes  mais nous nous servirons d   une biblioth  que toute faite     1 1  Avant propos  Les biblioth  ques les plus courantes offrent des solutions    certains probl  mes  omnipr  sents dans la programmation  Il est tr  s commode de s   en servir pour ne pas r  inventer la roue   Ainsi  utiliser une biblioth  que de haute qualit   offre des avantages importants         Les fonctions sont soigneusement impl  ment  es et bien test  es        en particulier elles sont plus fiables et plus efficaces qu   une solution ad hoc        elles fournissent une fonctionnalit   assez compl  te et standardis  e        le code de votre application ainsi cr     sera plus concis et plus lisible    De mani  re g  n  rale  le partage de biblioth  ques de qualit   permet de mutualiser des impl  mentations    prouv  es  de minimiser des r  impl  mentations inutiles  et de se concentrer sur l   essentiel     S Bref  les biblioth  ques c   est bon  mangez en   Z    En contrepartie  avouons qu   il existe aussi des inconv  nients         L utilisation d   une biblioth  que demande  bien   videmment  comme investissement initial la lecture  du    mode d   emploi    plus ou moins complexe  D   o   l   int  r  t des biblioth  ques bien construites et  d utilisation intuitive         Pour ce cours de programmation l   autre inconv  nient est d   ordre p  dagogique   on utilise souvent  une bibliot
9. conform  ment    notre sp  cification     Remarque 1 1  Pour utiliser le type Integer avec des constantes  vous pouvez bien   videmment utiliser les constantes  litt  rales du type int et les convertir en Integer   Pour les constantes plus grandes ce n   est plus jouable   Essayez  d   expliquer pourquoi   On fait alors appel aux cha  nes de caract  res      Integer a 12345      ok   constructeur    partir d   un int  Integer b  98765432109876543210        ok   constructeur    partir d   une cha  ne  a   Integer  98765432109876543210       ok   conversion explicite   a  123456789012345678901234567891      ok   conversion implicite  123456789012345678901234567890     constante litt  rale trop longue      a    Dans le m  me esprit  o   est l   erreur logique dans le calcul suivant   Comment le rectifier    Integer f  1 2 3 4 xD x6 7 8 x9 x10 x11 12 x13 x14 x15 16 x17 x18 x19 20      Quels sont les principes de cette impl  mentation  Rappelons que le chapitre I  partant du type  int  fut lourdement orient  e machine   il fallait d   abord comprendre la r  alisation du type int sur la  machine  et ensuite en se demandait dans quelles limites ce type pourrait bien servir pour nos calculs   L approche orient  e objet proc  de dans le sens inverse   on sp  cifie d   abord les propri  t  s et op  rations  n  cessaires pour mod  liser une classe d   objets  math  matiques ou autres   et ensuite on cherche    les  satisfaire par une impl  mentation convenable  C   est cette deuxi  me a
10. e   commande  Apr  s compilation avec g   postfixe cc  lgmpxx  o postfixe on peut ainsi   crire    gt  postfixe   1 5        ce qui calcule 1  5    121   Il s   agit donc d   une calculette en miniature   Ajouter d   autres fonctions qui   vous semblent int  ressantes   pgcd  ppem  factorisation  test de primalit    etc     MAE 22 juin 2009       I only took the regular course        What was that     enquired Alice      Reeling and Writhing  of course  to begin with     the Mock Turtle replied      and then the different branches of Arithmetic       Ambition  Distraction  Uglification  and Derision       Lewis Carroll  Alice   s Adventures in Wonderland    PROJET II    Calcul de la racine ri  me    Objectifs     gt    tudier deux algorithmes importants   la recherche dichotomique et la m  thode de Newton   gt  D  velopper une preuve de correction pour un algorithme non trivial     Ce projet vous propose d   impl  menter deux m  thodes afin de calculer la racine ni  me enti  re    a    pour des nombres naturels a assez grands  Pour cela nous n   aurons besoin que des op  rations   l  mentaires             impl  ment  es au pr  alable   nous nous servirons ici de la biblioth  que GMP   En principe notre  impl  mentation du type Naturel marcherait aussi  mais elle serait plus lente     Pour un probl  me difficile on est d  j   content de trouver une solution  S   il peut   tre r  solu par plusieurs  m  thodes  on a tout int  r  t    en choisir la plus efficace  Dans ce projet o
11. ent binomial  cherch    leur temps d   ex  cution peut diff  rer  Pour les petits nombres n et k c   est binomial2 qui gagne   tandis que pour les grands nombres la fonction binomial3 semble la plus efficace     Bien   videmment on ne peut comparer que les m  thodes que l   on conna  t  Question naturelle   existe   t il des m  thodes encore meilleures ou des astuces d   optimisation   Strat  gie g  n  rale   plus on sait sur la  fonction    calculer  plus de m  thodes se pr  sentent   En voici un exemple      Exercice P 1 7  V  rifier d   abord que votre fonction binomial3 calcule ais  ment  19090  mais elle    bloque sur onr   Comment expliquer ce comportement  En quoi la sym  trie c     A 2 peut elle      tre utilis  e pour optimiser le calcul  L   impl  menter en une fonction binomial4  V  rifier qu   ainsi les  calculs interm  diaires n   exc  dent jamais la valeur AU    2    valuation d   expressions alg  briques    Jusqu ici on ne peut entrer des entiers qu   en num  ration d  cimale  Or  entrer un grand entier comme  10100   949 par son   criture d  cimale de 101 chiffres n   est pas tr  s commode  Il sera plus naturel justement  d   utiliser une expression semblable    10100   949     La lecture des donn  es en entr  e constitue souvent la partie la plus n  glig  e d   un pro   gramme  Ce dernier devant communiquer avec une personne  il doit faire face aux  fantaisies  aux conventions et aux erreurs apparemment al  atoires de celle ci  Toute  tentative pour forcer la
12. es vecteurs  vector   que nous avons regard  e au  chapitre I  La STL offre aussi d   autres structures de donn  es qui sont fr  quemment utilis  es et tr  s utiles   suivant l   application envisag  e   les listes   List    les listes bidirectionnelles   deque    les piles  stack    les files   queue    les files de priorit    priority queue   les ensembles   set   et d   autres encore    Pour en savoir plus vous pouvez consultez la page www sgi com st1  Il existe   galement d   excel   lentes introductions    la STL   consultez votre biblioth  que universitaire     La biblioth  que GMP  Le GNU Multiple Precision Project a d  velopp   la biblioth  que GMP pour  des calculs efficaces en pr  cision arbitraire en C C    Elle offre des classes pour les nombres entiers  et rationnels  et les nombres    virgule flottante en pr  cision arbitraire  Vous pouvez consultez le site of   ficiel www swox com gmp o   vous trouverez une ample documentation  La biblioth  que GMP se trouve    galement sur le site de GNU  www  gnu org manual gmp  Avec votre installation sous GNU Linux vous  pouvez   galement taper info gmp C   pour lire la documentation locale en ligne     Que faut il pour mod  liser les entiers   En tenant compte de nos exp  riences pr  c  dentes  pr  cisons  nos exigences  On souhaite disposer d   un type Integer qui mod  lise les entiers dans le sens suivant      Repr  sentation et entr  e sortie  Tout d   abord  on veut que tout nombre entier puisse   tre repr  sent    com
13. est significatif         La repr  sentation interne n   est pas en base 10 mais en base 2  plus pr  cis  ment en base 2   pour    profiter pleinement de la structure du microprocesseur   La conversion en base 10 se fait uniquement     l   entr  e sortie  consid  r  e comme peu fr  quente et n  gligeable devant les calculs      M  me pour la GMP le principe de base reste incontournable   plus les nombres sont grands   plus ils occupent de m  moire  et plus les op  rations s   effectuent lentement  Mis    part ce constat  la  repr  sentation interne ne nous regardera pas dans la suite   l   essentiel est que mpz_class fonctionne  suivant la sp  cification ci dessus     Tests empiriques  Les r  sultats sont assez impressionnants   vous pouvez regardez le programme  gmp chrono cc pour comparer la performance de la classe mpz_class et notre candidat Naturel  Re   marquez    ce propos que notre addition semble comp  titive     un facteur constant pr  s   mais la complexit    quadratique de la multiplication scolaire se r  v  le catastrophique pour les nombres de plus en plus grands   La GMP  par contre  utilise les meilleurs algorithmes connus  et arrive ainsi    une complexit   quasi lin  aire     1 3  Exemple pratique   calcul de coefficients binomiaux  Apr  s les op  rations de base  regardons    une fonction un peu moins   l  mentaire   le coefficient binomial      Zx Z     Z  d  fini par  5   y is TANI    S0 lt k lt n et Qi   0 sinon  M  me pour de tels calculs tr  s simples  
14. fiable    Le v  rifier sur beaucoup d   exemples triviaux et non triviaux  Enfin  peut on prouver sa  correction    Le code source est il clair et bien comment      Essayez de lire et v  rifier la solution de quel   qu   un d   autre   Le logiciel s   ex  cute t il rapidement    Majorer si possible la complexit   th  orique  puis ef   fectuez de nombreux tests empiriques   Est il robuste dans des circonstances impr  vues    Soyez m  chant  et essayez de provoquer une erreur grave  puis invitez quelqu un d   autre    le faire   R  agit il toujours de  mani  re aimable envers l   utilisateur    Le tester sur un non sp  cialiste   L usage dans d   autres programmes  sera t il facile       revoir dans des applications ult  rieures  plus tard pendant ce semestre      MAE 22 juin 2009    
15. h  que comme une bo  te noire  c   est    dire  on apprend sa fonctionnalit   externe  en par   ticulier l   interface   mais on n   apprend pas comment elle est construite  on particulier on ignore  souvent la structure des donn  es et les algorithmes utilis  s     Afin de rem  dier    ces d  fauts dans le cas des grands entiers  nous le chapitre IT discute les   l  ments d   une  impl  mentation assez compl  te dans notre exemple Naturel  On ferra pareil dans des chapitres plus  avanc  s   permutations au chap  VI  quelques anneaux au chap  XII  puis des polyn  mes au chap  XIII  par  exemple  Bien qu   il existe de biblioth  ques ad  quates  on peut ainsi apprendre en d  tail le d  veloppement  math  matique  souvent int  ressant en lui m  me  Pour une application non p  dagogique on utilisera plut  t  une biblioth  que professionnelle  si possible     59    60 Chapitre III     La biblioth  que GMP    La biblioth  que STL  Le C   vient d  j   avec une biblioth  que standard   elle fait partie du C   et  n   est donc souvent pas remarqu  e comme biblioth  que    part enti  re  La biblioth  que la plus connue est  sans doute la STL  Elle fut d  velopp  e par Hewlett Packard Company    partir de 1994  puis par Silicon  Graphics Computer Systems    partir de 1996  Elle fut standardis  e et accept  e comme partie int  grante du  langage C   en 1998   tout syst  me conforme    ce standard fournit donc une version de la STL    La STL offre une classe g  n  rique pour mod  liser l
16. il y a en g  n  ral plusieurs m  thodes  possibles  Elles sont bas  es sur les m  mes op  rations   l  mentaires  elles aboutissent toutes au r  sultat  cherch    mais elles passent par des calculs interm  diaires bien diff  rents    Tr  s souvent nous devons choisir la m  thode la plus efficace parmi celles qui sont    notre disposition   Dans notre exemple  il y a au moins quatre m  thodes diff  rentes qui viennent    l   esprit      Exercice P 1 2  La d  finition  o    TE se traduit litt  ralement en une m  thode de calcul  L   impl  menter  en deux fonctions factorielle et binomial1  Quel mode de passage des param  tres convient le  mieux   Combien d   op  rations arithm  tiques effectuent elles  multiplications et divisions confondues  pour  calculer  C    Quel est le plus grand entier qui apparaisse dans les calculs interm  diaires   Est ce une    m  thode efficace pour calculer  77       Exercice P 1 3  La fraction simplifi  e       sugg  re une deuxi  me m  thode   on calcule    d   abord le num  rateur  puis on divise par le d  nominateur  Expliquer bri  vement en quoi cette m  thode est  avantageuse  puis l   impl  menter en une fonction binomial2     n n  _ n n   1    n   k 1     n  _   n  n k 1 si  Exercice P 1 4  La formule           gt k Peut   tre lue comme    gt      a    avec condition  initiale o   1  Ceci donne lieu    une troisi  me m  thode de calcul   une boucle o   multiplications et divi   sions sont effectu  es en alternance  Expliquer bri  vement en 
17. leur cherch  e     MAE 22 juin 2009    83     Impl  mentation et tests empiriques 67    Exercice 2 3    crire un programme qui affiche la suite r  currente d  finie dans la proposition  afin de  v  rifier empiriquement ces affirmations  et pour motiver l   algorithme II 3 ci dessous  Montrer la correction  de cet algorithme  en admettant la proposition      tablir d   abord la terminaison  puis la correction du r  sultat  en suivant les commentaires dans la description de la m  thode     Algorithme III 3 Racine ni  me enti  re d   apr  s Newton H  ron       Entr  e  deux entiers y  gt  1 etn  gt  2  Sortie  Tunique entier r  gt  1 v  rifiant r     lt  y  lt   r 1    choisir une valeur initiale x tel que x     gt  y   I voir la remarque 3 1 plus bas  r  p  ter  TX  x  4   n 1 x    J      variante enti  re de la r  cursion de Newton H  ron  jusqu      x  gt r    condition d   arr  t motiv  e ci dessus    retourner r    Exercice M 2 4  Si vous   tes courageux  vous pouvez essayez de prouver la proposition    Indication      Dans la version r  elle  on it  re la fonction f  R      R  donn  e par f x    1   n    1 x  y    Elle  est strictement croissante sur  4 y      elle v  rifie y y  lt  f x   lt  x pour tout x  gt  4 y  ainsi que f  4 9    4 y  ceci est  donc le seul point fixe et il est attractif   Le d  tailler   Dans la version enti  re nous it  rons g  Z      Z  d  finie par    g x       n    1 x   y x 7      n   V  rifier que g x      f x   pour tout x     Z      Remarque
18. mani  re naturelle   de sorte que a  b   quivaille    a a b etc  De m  me pour les op  rateurs    et     pour les   quels on exige que   a   quivaille    a a 1 etc  L int  r  t pourra   tre une meilleure lisibilit    et    ventuellement une plus grande performance   Cela d  pend du niveau d   optimisation      Ces op  rations   l  mentaires d  crivent alors la base requise pour travailler avec des entiers sur ordi   nateur  D   autres fonctions seraient   galement souhaitables  comme factorielle  binomial  racine   pgcd  ppcm  est premier  factoriser etc  On en d  veloppera quelques unes dans la suite  mais tout  d  veloppement ult  rieure sera bas   sur les op  rations   l  mentaires ci dessus     1 2  Les entiers de la biblioth  que GMP  Comme on a vu au chapitre I  impl  menter l    arithm  tique  des nombres entiers est faisable mais tr  s laborieux  Heureusement il existe d  j   de telles impl  mentations   soigneusement test  es et optimis  es  Nous utiliserons par la suite la classe mpz_class de la biblioth  que  GMP  GNU Multiple Precision Library   Elle satisfait    toutes nos exigences ci dessus  et de plus les  calculs s   effectuent tr  s rapidement  Son utilisation est assez intuitive      MAE 22 juin 2009    81     Une impl  mentation    professionnelle    des nombres entiers 61    Programme II 1 Exemple d   utilisation de la classe Integer gmp exemple cc     include  lt iostream gt     d  clarer l   entr  e sortie standard  using namespace std     acc  s direct
19. me une valeur de type Integer  Les op  rateurs d   entr  e  gt  gt  et de sortie  lt  lt  permettent de  lire et d     crire ces valeurs   ils traduisent alors entre la repr  sentation externe  l     criture d  cimale   et la repr  sentation interne  que nous ignorons      Op  rateurs d   affectation  On voudra utiliser l   op  rateur d affectation   avec la syntaxe et la s  mantique  usuelle   il prend deux arguments  une variable de type Integer    gauche et une valeur de type  Integer    droite  puis il affecte la valeur    la variable     Conversion de type  La conversion devra permettre d   affecter une valeur du type int    une variable  var de type Integer  On pourra donc   crire var Integer 1  pour une conversion explicite  ou bien var 1 pour une conversion implicite     Op  rateurs de comparaison  On voudra utiliser les op  rateurs de comparaison         ainsi que  lt     lt     gt    gt   avec la syntaxe usuelle     savoir   ils prennent deux arguments de type Integer et  renvoient un r  sultat de type bool  qui correspond    la comparaison dans Z     Op  rateurs arithm  tiques  On voudra utiliser les op  rateurs arithm  tiques              4 avec la  syntaxe usuelle     savoir   ils prennent deux arguments de type Integer et renvoient un r  sultat  de type Integer  Quant    leur s  mantique  on exige que le r  sultat corresponde au r  sultat de  l   op  ration respective sur Z     Op  rateurs mixtes  Les op  rateurs          x          devront s   utiliser d   une 
20. n regardera la situation suivante      Lemme 0 1  Soit f  N     N une application v  rifiant 0   f 0   lt  f 1   lt  f 2   lt      avec sup f        Alors pour tout y     N il existe un unique x     N de sorte que f x   lt y  lt  f x  1                  En appliquant ce lemme    f x    x     on voit que le nombre cherch   est x   RE C   est bon    savoir  qu   il existe et qu   il est unique  mais comment le trouver efficacement      Sommaire      Recherche dichotomique      La m  thode de Newton H  ron      Impl  mentation et tests empiriques     Crit  res de qualit   d   un logiciel     BE    D      1  Recherche dichotomique    Exercice 1 1  Commen  ons par la solution la plus   vidente  Montrer que l   algorithme IIL 1 est correct    Pourquoi s   arr  te t il   Pourquoi renvoie t il la valeur cherch  e   V  rifier qu   il n  cessite x   1   valuations  de la fonction f     Algorithme IIL1 Encadrement f x   lt  y  lt  f x  1  par une recherche lin  aire    Entr  e  une fonction croissante f  N     N comme ci dessus et un nombre naturel y     N   Sortie  Tunique x     N tel que f x   lt y  lt  f x 1    r    0 1 1 On commence par r   0 donc f r   lt  y   tant que f r 1   lt  y faire r   r 1    On assure f r   lt  y apr  s chaque it  ration   retourner r    On sait finalement f r   lt  y  lt  f r 1   donc r   x     Le co  t lin  aire de l   algorithme II 1 est prohibitif pour des exemples r  alistes  o   x peut   tre tr  s  grand     l instar de la recherche dichotomique discu
21. notation infixe  on peut   crire     10 100 949 en  notation pr  fixe ou encore 10 100   949   en notation postfixe     Question 2 1  Pourquoi la notation infixe n  cessite t elle des parenth  ses alors que les notations pr  fixe et  postfixe peuvent s   en passer   Expliquer comment transformer les diff  rentes   critures lin  aires en un arbre   et r  ciproquement comment transformer un arbre en chacune des   critures lin  aires  On ne poursuivra pas  cette approche ici  mais elle sera indispensable pour correctement stocker analyser   valuer des expressions  d   une mani  re plus approfondie     63    MAE 22 juin 2009    64    Chapitre III     La biblioth  que GMP    Dans la suite on d  veloppera une fonction eval postfix qui   value une expression en notation   postfixe  On obtient ainsi une sorte de calculette  quoique modeste  qui permet de commod  ment calculer  avec des grands entiers  On mettra les fonctions de calcul dans le fichier integer cc et les fonctions  d   entr  e sortie dans le fichier eval postfixe cc    amp  Au del   de son but    court terme  ce projet s   inscrit dans un d  veloppement    durable    tout le long  ce semestre   nous commen  ons ici le travail sur le fichier integer  cc qui augmentera    fur et    mesure   si vous le maintenez comme souhait    bien s  r   Chaque fois que vous programmez une fonction d   int  r  t  g  n  ral pour la classe Integer  elle devrait   tre plac  e dans integer cc  Id  alement vous inclurez ce  fichier dans vos 
22. ns aussi efficace    que son concurrent dichotomique  pour x   2 et x   4 il est m  me l  g  rement sup  rieur  Mais d  j      partir  de x   6 la recherche dichotomique s   amortit               lin  aire 1 2 3 4 5 7  dichotomique 1 2 4 4 6 6  Pour x grand la recherche dichotomique est nettement plus efficace que la recherche lin  aire  Pour    x  106  par exemple  elle ne n  cessite que 40   valuations  alors que l   algorithme lin  aire en n  cessite un  million  Pour x   10   c   est 60 contre un milliard      Exercice 1 4  On peut appliquer les m  thodes pr  c  dentes    la fonction f  N     N  f x    xb et une  valeur a     N  afin de trouver l   unique q     N v  rifiant gb  lt  a  lt   q   1 b  On obtient ainsi le quotient q de  la division euclidienne de a par b  avec reste r   a     qb   D  tailler pourquoi la recherche lin  aire revient     la m  thode des soustractions it  r  es  alors que la recherche dichotomique correspond    la division scolaire  en num  ration binaire   Voir chapitre II  81 7      2  La m  thode de Newton H  ron    La recherche dichotomique s    applique    toute fonction croissante f  N     N  Peut on faire mieux dans  le cas sp  cifique o   la fonction est donn  e par f x    x      Pour ceci on s   inspire du r  sultat suivant  que  vous reconnaissez de votre cours d   analyse      Th  or  me 2 1  Calcul de la racine ni  me d   apr  s Newton H  ron   Soit n  gt  2 un entier et a  gt  0 un nombre  r  el  Pour toute valeur initiale u    gt  0
23. pproche que nous poursuivons ici  et  notre impl  mentation du type Naturel en   tait un premier exemple    En gros  la classe mpz_class est impl  ment  e comme notre exemple Naturel  en particulier elle  utilise un tableau de taille adaptable pour stocker les chiffres d   un nombre entier  La principale diff  rence  entre mpz class et notre candidat Naturel est la performance  En effet  les programmeurs de la bi   blioth  que GMP ont fait un   norme effort d optimisation         Au niveau algorithmique  la biblioth  que GMP impl  mente les meilleurs algorithmes connus    ce   jour  De nombreuses variantes ont   t   test  es et optimis  es  puis les meilleures ont   t   retenues     MAE 22 juin 2009    62    Chapitre III     La biblioth  que GMP       Sile choix de l   algorithme le mieux adapt   d  pend des donn  es  ce choix se fait au moment de  T ex  cution  typiquement en fonction de la taille des donn  es  Pour la multiplication notamment on  choisira entre scolaire et Karatsuba  puis d   autres encore que nous n   avons pas pr  sent  s ici         Les fonctions les plus fr  quentes  comme l   addition ou la soustraction  ou d   autres routines de base   sont cod  es en langage machine et non en C C    afin d   utiliser le plus efficacement les instructions  fournies par le microprocesseur        Cette approche est tr  s laborieuse car on doit r  impl  menter ces fonctions sur chaque type de  processeur  Ceci n   est justifi   que dans les rares cas ou le gain esp  r   
24. programmes ult  rieurs  pour avoir toute la facilit   d   une mini biblioth  que  bien   crite et  bien test  e  si vous suivez les r  gles de l   art      2 2    valuation en notation postfixe  Pr  cisons d   abord ce que nous voulons faire  On souhaite dis   poser d   une fonction d   entr  e avec  au moins  les possibilit  s suivantes         On peut entrer un entier en num  ration d  cimale   Exemple      l   entr  e 123 produit la valeur 123        On peut entrer toute une expression  d  limit  e de parenth  ses        et           Exemple      l entr  e   5     donne la valeur 120        On peut empiler plusieurs entiers  s  par  s d   espaces  La commande     del     efface le dernier entier   il le d  pile   Le passage    la ligne  la touche return  fait afficher la pile   Exemple      l entr  e   123 456 789 del  lt return gt  affiche   123 456 de sorte que l   on  puisse contr  ler le r  sultat interm  diaire et continuer l   entr  e        On peut entrer le nom d   une fonction ou un op  rateur arithm  tique comme           en notation  postfixe  Une telle fonction d  pile ses arguments puis empile son r  sultat   Exemple      l entr  e   123 456    lt return gt  affiche   579       D   autres fonctions seront faciles    ajouter    fur et    mesure   Exemple      l entr  e   100 20 binomial   calculera le coefficient binomial  2     Exercice P 2 2  Vous trouvez le d  but d   une impl  mentation dans le fichier eval postfixe cc  Lire le  code source  le compiler pui
25. quoi cette m  thode pourrait   tre avantageuse     puis l   impl  menter en une fonction binomial3     Exercice P 1 5  La propri  t         Ci  H    j donne lieu    une r  currence qui   vite toute multiplication     en se basant sur les valeurs initiales o   C    1  L   impl  menter en une fonction r  cursive binomial0   Comme avant  veillez que  5    0pourk  lt  0 ouk  gt n     Exercice P 1 6    crire un programme qui lit au clavier deux entiers n et k  puis affiche les r  sultats des  fonctions binomial3  binomial2  binomiali  binomialO  dans cet ordre ci   Tester soigneusement  les fonctions pour quelques petites valeurs  puis pour des exemples plus grandes  Les r  sultats co  ncident   ils comme il se doit   Si oui  on veut alors comparer leur performance      MAE 22 juin 2009      2       valuation d expressions alg  briques     1  Calculer 4   y  o  g EH         Qu   observez vous   Comment expliquer le ralentissement de la fonc   tion binomial0    Vous pouvez arr  ter le programme avec CTRL c       2  En excluant binomial0O  calculer  e   EA    kr ue     Qu    observez vous   Comment    expliquer le ralentissement de la fonction binomial1       3  En utilisant seulement binomial3 et binomial2  calculer  000    Errai oooi      Au d  but  il n   y a pas de diff  rence significative  puis binomial2 devient plus lente que binomial3   Comment expliquer cette diff  rence      Justifiez ainsi la conclusion suivante   bien que les quatre fonctions calculent toutes le coeffici
26. s le tester  Regarder en particulier l   usage de la pile    Compl  ter l impl  mentation en incluant les op  rations arithm  tiques   l   addition    la soustraction     la multiplication    la division euclidienne    le reste de la division    En chaque instance on r  cup  re  les deux op  randes de la pile  puis on y remet le r  sultat du calcul  Veillez    l   ordre des op  randes ainsi  qu      d     ventuelles erreurs  par exemple la division par z  ro     Exercice P 2 3    crire une fonction binomial dans integer cc  issue de vos exp  riences en 81 3  et  la rendre disponible dans eval_postfixe cc via la commande binomial     Exercice P 2 4    crire une fonction  Integer puissance  Integer base  Integer exp    dans integer cc  et la rendre disponible dans eval postfixe cc via l   op  rateur    Ajouter  Integer puissance  Integer base  Integer exp  const Integer amp  mod    qui calcule la puissance modulaire  c   est    dire le reste modulo mod   Discuter le mode de passage des  param  tres   La rendre disponible via l   op  rateur ternaire      Remarque      Cette approche vous semblera  peut   tre redondante  Essayons donc de le justifier   En quoi la puissance modulaire peut elle   tre plus  efficace que la puissance ordinaire suivie d   une r  duction modulaire   Si possible  optimisez vos fonctions   puis tester leur performance   On y reviendra dans le projet VIII      Exercice P 2 5  Le programme postfixe cc permet d   valuer une expression pass  e par la ligne d
27. sans conducteur     Fiabilit    Un programme est fiable s   il fait toujours exactement ce pour quoi il est fait  en parfaite    conformit   avec ses sp  cifications  Cette qualit   est indispensable  Pour une application impor   tante on n   acceptera pas un logiciel qui marche 9 fois sur 10     Clart    Dans le souci de fiabilit    on doit insister sur un code source clair et net  Un programme    embrouill   ou incompr  hensible est inutilisable   d   abord on n   arrive pas    se convaincre de sa  fiabilit    puis il sera difficile  voire impossible  de le maintenir ou modifier  Que vaut un pro   gramme qui semble marcher mais on ne comprend pas pourquoi      Efficacit    Un programme efficace s ex  cute rapidement et utilise   conomiquement la m  moire et    toute autre ressource de l ordinateur    videmment  cette qualit   est assez importante dans la  pratique   que vaut une r  ponse correcte si elle arrive trop tard         L efficacit   ne doit   tre recherch  e qu apr  s satisfaction de deux exigences pr  c  dentes  qui  sont primordiales   que vaut une r  ponse rapide si elle est fausse      Robustesse  Un programme fiable travaille correctement dans les situations pr  vues par sa sp  cification     Il est robuste si de plus il r  agit de mani  re raisonnable dans des situations impr  vues  Par  exemple  si l   utilisateur entre des donn  es hors domaine  le logiciel  au lieu de d  railler  les  refuse poliment et propose une mani  re de rectifier la situation  Apr 
28. t  e au chapitre V  l   algorithme suivant met en   uvre  une variante astucieuse  qui am  liore consid  rablement la performance      Exercice 1 2  Prouver que l   algorithme II 2 est correct   montrer d   abord la terminaison  puis la correction  en suivant les commentaires dans la description de la m  thode     Exercice 1 3  V  rifier pour x   0 que l   algorithme II 2 n   effectue qu   une seule   valuation de f  Pour x  gt  1  d  terminer le nombre exact d   valuations de f effectu  es dans la premi  re puis la seconde boucle   Indication      Vous pouvez commencer par les cas x   1     8 et ainsi v  rifier le tableau suivant     65    66 Projet IHI     Calcul de la racine ni  me    Algorithme IIL2 Encadrement f x   lt  y  lt  f x  1  par une recherche dichotomique    Entr  e  une fonction croissante f  N     N comme ci dessus et un nombre naturel y     N  Sortie  Tunique x     N tel que f x   lt y  lt  f x 1    r0  s1    On commence par r   0 donc f r   lt  y   tant que f s   lt  y faire rs  s  2s    On assure ainsi que f r   lt  y  lt  f s    tant que s   r  gt  1 faire    Tant que l intervalle n   est pas r  duit    un point      m  lt         1 1    on divise l   intervalle au milieu et        si f m   lt  y alors r    m sinon sm II    on assure    nouveau que f r   lt  y  lt  f s    fin tant que  I finalement s  r  1 et f r   lt  y lt  f s   retourner r    On conclut que r   x   Conclusion      Pour des valeurs minuscules  x  lt  5  l algorithme lin  aire est au moi
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
平成22年度研究報告書 - 独立行政法人 航海訓練所  ,た離籍「 野石,白(養藻り打 本取扱説明書は上記形名の。械研 Seーecti  NEC MultiSync XG-1352G User's Manual  Phoenix Interface Module 2x RJ-45 Ethernet  setting warmer drawer control  user`s manual - EWD Solutions  disponible ici    Copyright © All rights reserved. 
   Failed to retrieve file