La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Multiprécision.

Présentations similaires


Présentation au sujet: "Multiprécision."— Transcription de la présentation:

1 Multiprécision

2 Intérêt Pour les algorithmes de cryptographie à clés publiques (RSA, ECC, LUC, El-Gamal …), on a besoin de nombres premiers de plusieurs centaines de chiffres Une vérification même approchée de primalité nécessite des additions, multiplications et divisions en multiprécision. Les processeurs possède des unités arithmétiques entières ou flottantes de taille fixe

3 Comment éviter ce cours ?
La plupart des algorithmes « scolaires » sont suffisant pour des nombres de quelques dizaines de chiffres et deviennent vraiment obsolètes au delà de 100 chiffres Il existe des librairies de multiprécision toutes faites dans la plupart des languages de programmation

4 Notion de complexité On suppose que l’on dispose d’une machine capable de faire des opérations dites élémentaires. Il s’agit d’opérations en temps fixe (Exemple: addition, soustraction en 32 ou 64 bits). On suppose aussi que cette machine dispose d’une mémoire où est stockée les données d’un problème à résoudre. La taille du problème, notée T, est le nombre de bits nécessaires au stockage. La complexité du problème, notée C, est une fonction telle qu’un problème de taille T, nécessite au plus C(T) opérations élémentaires pour être résolu.

5 Notion de complexité Plutôt que de calculer exactement la fonction C, on se contente le plus souvent d’en donner un équivalent. Exemple: l’addition scolaire a une complexité linéaire, le tri de n entiers a une complexité en n.log(n), l’algorithme de Meissel-Lehmer a une complexité en n2/3.log(n), l’algorithme de Karatsuba a une complexité en n1,58, l’algorithme de Chernikova a une complexité exponentielle. n n.log(n) n2/3.log(n) 2n 1 2 5 8,05 4,66 32 10 23,03 10,53 1024 1,12e15 51,72 195,60 50 n1,58 12,72 38,02 483,48 Comparaison de complexité

6 Addition scolaire A=(an-1an-2 … a1a0) représente A= ai Di où D=232 ou 264 (suivant la taille des opérateurs) B=(bn-1bn-2 … b1b0). Soit S=(snsn-1 … s1s0) avec S=A+B On calcule par récurrence c0=0, sk=ak+bk+ck-1 (mod. D) et ck=1 si bk+ck-1 > D-1-ak et 0 sinon. Le modulo se calcule automatiquement et le test se calcule en nombres inférieurs à D La complexité est linéaire (le nombre d’opérations est inférieur à 4n)

7 Addition: complexité L’addition scolaire est linéaire
Quand on ajoute A=(an-1an-2 … a1a0) et B=(bn-1bn-2 … b1b0), la moindre modification d’un ak ou un bk change le résultat final Un algorithme d’addition doit « connaître » tous les ak et bk. L’algorithme ne peut pas être moins que linéaire

8 Multiplication scolaire
On veut multiplier A=(an-1an-2 … a1a0) et B=(bn-1bn-2 … b1b0) On forme les produits partiels A.bk et on les ajoute en les décalant (les produits albk sont à calculer en précision double  4 multiplications et 3 additions simples) Le coût d’un calcul A.bk est linéaire. On doit en calculer n et on doit les additionner Le coût global est en n2.

9 Méthode de Karatsuba (1962)
On veut multiplier A=(a2n-1a2n-2 … a1a0) et B=(b2n-1b2n-2 … b1b0) On a A=A1.Dn+A0 et B=B1Dn+B0 avec A1=(a2n-1a2n-2 … an+1an), A0=(an-1an-2 … a1a0), B1=(b2n-1b2n-2 … bn+1bn), B0=(bn-1bn-2 … b1b0). M=A.B=M2D2n+M1Dn+M0 avec M0=A0.B0, M1=A0.B1+A1.B0, M2=A1.B1. On écrit M1=(A0+A1).(B0+B1)-M0-M2 On a besoin de 3 multiplications au lieu de 4 dans le cas de la multiplication scolaire. On continue récursivement (si le nombre de mots est impair, on coupe au mieux). La complexité de la multiplication de deux chiffres de n mots est proportionnel à nlog2(3)n1.58

10 Karatsuba: Exemple A=171 659, B=891 512
On prend D=1000A1=171, A0=659, B1=891,B0=512 M2= A1.B1= 171891= , M0= A0.B0= 659512= M1= (A0+A1).(B0+B1)-M0-M1= (8301 403)-M0-M1= M0-M1= R=D2.M2+D.M1+M0=

11 Méthode de Toom-Cook On coupe en trois parties
A=A2D2n+A1Dn+A0, B=B2D2n+B1Dn+B0 M=A.B= M4D4n+M3D3n+M2D2n+M1Dn+M0 On pose P1=(A2+A1+A0).(B2+B1+B0), P-1=(A2+(-1)nA1+A0).(B2+(-1)nB1+B0), P2=(22nA2+2nA1+A0).(22nB2+2nB1+B0) On a M0=A0B0, M1=2A2B2-(1/2)A0B0-(1/3)P-1+P1-(1/6)P2, M2=-A2B2-A0B0+(1/2)P-1+(1/2)P1 et M3= - 2A2B2+(1/2)A0B0 -(1/6)P1-(1/2)P1+(1/6)P2, M4=A2B2 On a 5 multiplications seulement. La complexité est proportionnel à nlog3(5)n1.46

12 Toom-Cook: Exemple A=171 659, B=891 512
D=100, A2=17, A1=16, A0=59, B2=89, B1=15, B0=12 P1=(A2+A1+A0).(B2+B1+B0)=10 672 P-1=(A2-A1+A0).(B2-B1+B0)=5 160 P2=(4A2+2A1+A0).(4B2+2B1+B0)=63 282 M0=A0B0=708, M4=A2B2=1 513, M1=2M4-(1/2)M0-(1/3)P-1+P1-(1/6)P2=1 077, M2=-M4-M0+(1/2)P-1+(1/2)P1=5 695, M3=-2M4+(1/2)M0-(1/6)P-1-(1/2)P1+(1/6)P2=1 679 R=D4.M4+D3.M3+D2M2+D.M1+M0=

13 Généralisation On peut continuer et couper en r=4,5,6 … parties
La complexité est proportionnelle à nlog(2r-1)/log(r) Théoriquement on peut donc obtenir des algorithmes de multiplications en n(1+) avec >0 aussi petit que possible Mais les calculs intermédiaires sont de plus en plus lourds Pratiquement on n’implémente même pas l’algorithme de Toom-Cook: si besoin, on lui préfère les algorithmes à transformées de Fourier

14 Transformée de Fourier
Multiplier des nombres ou des polynômes, c’est pareil. A=(an-1an-2 … a1a0) et B=(bn-1bn-2 … b1b0) A(X)= an-1Xn-1+an-2Xn-2+ … +a1X1+a0,, B(X)= bn-1Xn-1+bn-2Xn-2+ … +b1X1+b0 Si P(X)=A(X).B(X), alors A.B=P(D) P est de degré 2n-2, si on connaît 2n valeurs distinctes de P, on peut déterminer P (par exemple par interpolation de Lagrange) La transformée de Fourier se sert des points wk=exp(2ik/2n), 0k<2n On définit Aj=A(wj), Bj=B(wj) et Pj=P(wj) On a Pj=Aj.Bj

15 Transformée de Fourier
On calcule les Aj et Bj par transformée de Fourier On calcule les Pj = Aj . Bj On fait une transformée de Fourier inverse pour déterminer les Pi Le calcul des transformées de Fourier et de Fourier inverse se fait en une complexité n.log(n) Le calcul des Pj est linéaire Le coût global est donc en n.log(n)

16 Multiplication: Complexité
L’algorithme scolaire a une complexité en n2 L’algorithme de Karatsuba est en n1.58 L’algorithme de Toom-Cook est en n1.46 L’algorithme par transformée de Fourier de Schonage a une complexité en n.log(n) Mais en fait, Winograd a démontré que la complexité de la multiplication est juste linéaire

17 Equation f(x)=0 On suppose f fonction réelle, de classe C1 sur un intervalle ]a,b[ qui s’annule dans l’intervalle On définit par récurrence x0 ]a,b[, et xn+1=xn-f(xn)/f’(xn) pour n1 Suivant f et x0, la suite xn converge vers une limite l telle que f(l)=0 Méthode de Newton Convergence généralement quadratique (le nombre de décimales exactes double à chaque itération)

18 Calcul de l’inverse Soit a un nombre réel positif, on cherche à calculer 1/a On pose f(x)=1/x-a L’itération devient xn+1=xn(2-a.xn) Si xn-1/a= alors xn+1-1/a=a.2 Si <1/a, alors a.2 <  Donc si x0]0,2/a[, la suite converge vers 1/a On a donc besoin d’une estimation grossière de 1/a pour initialiser l’algorithme La convergence est quadratique

19 Inverse: Exemple a= En regardant les premiers bits de a, on se rend compte que 0.5 < a < 1 donc 1 < 1/a < 2  on peut initialiser avec x0=1.5 x1=x0(2-a.x0)= x2=x1(2-a.x1)= x3=x2(2-a.x2)= x4=x3(2-a.x3)=

20 Division entière Soit A et B deux entiers, on veut calculer A/B
On calcule q=1/B avec une précision inférieure à 1/A par excès (resp. par défaut) On calcule A.q et on l’arrondit à l’entier par défaut (resp. par excès)

21 Division entière (Exemple)
A= , B= En regardant les premiers bits de A, on sait que A<51011, on a donc à calculer q avec une précision de 210-12 On a q= à 210-12 près La valeur de q est par excès (l’itération suivante donne une valeur légèrement inférieure) A.q= à moins de 1 près On arrondit à l’entier inférieur et on trouve A/B=

22 Calcul d’un modulo Soient A et B deux entiers, on veut calculer r=A mod B On calcule le quotient entier q=A/B par l’algorithme précédent On calcule alors r=A-q.B Si B est petit par rapport à A, il existe d’autres méthodes

23 Racine carrée Soit a un nombre réel positif et soit à calculer a
On pose f(x)=x2-a et on utilise la méthode de Newton xn+1=(xn+a/xn)/2 Connue depuis l’antiquité sous le nom de méthode de Hénon Problème: nécessite une division

24 Racine carrée: 2ème méthode
f(x)=1/x2-a L’itération devient xn+1=(3xn-a.xn3)/2 La suite converge vers 1/a, on a plus qu’à multiplier par a pour trouver a. Plus de divisions Si x0]0, 2/a[, la suite converge quadratiquement vers 1/a

25 Racine carrée: Exemple
a=5, 4<a<16, 2<a<4, 1/4<1/a <1/2 x0=0.375 x1=(3x0-a.x03)/2= x2=(3x1-a.x13)/2= x3=(3x2-a.x23)/2= x4=(3x3-a.x33)/2= x5=(3x4-a.x43)/2= x6=(3x5-a.x53)/2= (x6=x5on s’arrête) a5.x6= , la valeur est exacte à près En fait a= …

26 Itérations d’ordre supérieur
On cherche à résoudre f(X)=0 On suppose que x est proche d’une racine de l’équation f(x+h)=f(x)+h.f’(x)+(h2/2).f’’(x)+ … (Taylor) On résoud en h l’équation f(x)+h.f’(x)+ (h2/2).f’’(x)=0 On trouve h=-(f’(x)/f’’(x))(1-(1-g(x))1/2) avec g(x)=2f(x)f’’(x)/f’(x)2 f(x) est supposé petit et si f est une fonction suffisamment régulière, g(x) est aussi petit

27 Itérations d’ordre supérieur (suite)
Si  est petit alors 1-(1-)1/2 /2+2/8 (Taylor) On applique a g(x) et on trouve (1-(1-g(x))1/2)(g(x)/2).(1+g(x)/4) D’où h -(f(x)/f’(x)).(1+f(x)f’’(x)/(2.f’(x)2)) On pose xn+1=xn-(f(xn)/f’(xn)).(1+f(xn)f’’(xn) /(2.f’(xn)2)) La suite converge cubiquement vers la racine de f(X)=0 Itération de Householder (1970)

28 Itérations d’ordre supérieur (fin)
On peut continuer et définir des itérations quartiques, quintiques etc … Mais toutes les fonctions ne s’y prêtent pas Il faut que les dérivés successives soient faciles à calculer Il faut que le surcoût en calcul soit rentable en termes de vitesse de convergence

29 Exemple: Inverse Calcul de l’inverse de a f(x)=1/x-a
On choisit la valeur initiale x0 proche de 1/a On pose hn=(1-a.xn) Itération quadratique: xn+1=xn+xnhn (Newton) Itération cubique: xn+1=xn+xn(hn+hn2) (Householder) Itération quartique: xn+1=xn+xn(hn+hn2+hn3) Itération quintique: xn+1=xn+xn(hn+hn2+hn3+hn4) Etc …

30 Exemple: Inverse a=0.52369817, x0=1.5 quadratique cubique quartique
n=2 n=3 n=4

31 Calcul des fonctions élémentaires
Calcul des fonctions sin, cos, log, … On se sert des propriétés de la fonction pour se ramener à un intervalle donné Pour une précision limitée (une dizaine de chiffres décimaux), l’algorithme CORDIC peut faire le calcul avec uniquement des additions (c’est l’algorithme des calculatrices) Pour une plus grande précision, on peut utiliser des développement de Taylor en se plaçant au milieu de l’intervalle pour accélérer la convergence Pour une précision maximale, on utilise des techniques comme le binary splitting ou l’AGM

32 Exemple: sinus On a sin(x+2)=sin(x), sin(x+)=-sin(x), sin(-x)=-sin(x), sin(x)=cos(/2-x) On peut donc se limiter à calculer dans l’intervalle [-/4, /4] sin(x)=x-x3/6+x5/120+…=(-1)nx2n+1/(2n+1)! cos(x)=1-x2/2+x4/24+…=(-1)nx2n/(2n)! Les développements tronqués se calcule par l’algorithme de Horner pour limiter les calculs Exemple: 1-x2/2+x4/24-x6/720=1-(x2/1.2).(1-(x2/3.4)(1-x2/5.6))

33 Exemple numérique Calcul de sin(8) à 5 décimales près
sin(8)=sin(3-8)=cos(8-5/2) On a 8-5/26<10-5, on peut donc se limiter aux trois premiers termes du développement de cos(x) On utilise donc cos(x)1-(x2/1.2).(1-(x2/3.4)) Le calcul par l’algorithme de Horner est stable (les erreurs d’arrondis ne se propage pas) On trouve numérique sin(8)= En fait sin(8)=

34 Exemple: Calcul de e à 10 décimales
On a e=1+1/2! + 1/3! + … On a 15! > 1010, on peut donc s’arrêter au 15 ème terme On pose x15=1/15 et xn=(1+xn-1)/n et on a exp(1)1+x0 En fait e La valeur trouvée est correcte à 10 décimales près

35 Pour aller plus loin … Site web: http://numbers.computation.free.fr
Arithmétique en précision arbitraire, Paul Zimmermann, Publication interne INRIA no 4272, septembre 2001 AGM: Fast multiple-precision evaluation of elementary functions, Richard P. Brent, Journal of the ACM, vol 2 no 23 pages (1976) Calcul de : Pi and the AGM, J.M. et P.B. Borwein sur le site


Télécharger ppt "Multiprécision."

Présentations similaires


Annonces Google