Programmation Python/Numériques
Il existe deux types pour définir des nombres entiers : le type int et le type long. Il existe également un type pour représenter des nombres à virgule : le type float.
Les nombres entiers de type "int".
Les int représentent le type le plus facilement représentable sur une architecture donnée. Par exemple, sur une machine 32-bits, la taille d'un int sera de 32-bit, donc un int permettra de représenter des nombres entre formula_1 et formula_2, soit entre -2 147 483 648 et 2 147 483 647.
Un littéral int s'écrit tout simplement avec les chiffres de 0 à 9, précédé éventuellement du symbole -.
Il est possible d'écrire ce littéral suivant trois bases :
Les nombres entiers de type "long".
Un entier long est un entier dont la taille n'est limitée que par la mémoire allouée par l'ordinateur à l'interpréteur Python. C'est à dire qu'un long permet d'écrire des entiers aussi grands que l'on veut. 
Il existe deux manières d'utiliser des long :
Il n'est pas nécessaire d'utiliser le type long de manière systématique : pour les entiers de taille raisonnable, le type int est beaucoup plus optimisé.
Pour convertir un long en int (et inversement), il est possible d'utiliser les fonctions int() et long().
Limite entre « integer » et « long ».
Supposons que nous voulions modifier légèrement notre précédent exercice sur la suite de Fibonacci, de manière à obtenir l'affichage d'un plus grand nombre de termes. "À priori", il suffit de modifier la condition de bouclage, dans la deuxième ligne. Avec codice_1, nous devrions obtenir quarante-huit termes. Modifions donc légèrement l'exercice, de manière à afficher aussi le type de la variable principale :
Que pouvons-nous constater ?
Si nous n'avions pas utilisé la fonction codice_2, qui nous permet de vérifier à chaque itération le type de la variable codice_3, nous n'aurions rien remarqué du tout : la suite des nombres de Fibonacci s'affiche sans problème (et nous pourrions encore l'allonger de nombreux termes supplémentaires).
Il semble donc que Python soit capable de traiter des nombres entiers de taille illimitée.
L'exercice que nous venons de réaliser indique cependant qu'il se passe « quelque chose » lorsque ces nombres deviennent très grands. Au début du programme, les variables codice_4, codice_3 et codice_6 sont définies implicitement comme étant du type "integer". C'est ce qui se passe toujours avec Python lorsqu'on affecte une valeur entière à une variable, à condition que cette valeur ne soit pas trop grande. Dans la mémoire de l'ordinateur, ce type de donnée est en effet encodé sous la forme d'un bloc de 4 octets (ou 32 bits). Or la gamme de valeurs décimales qu'il est possible d'encoder sur 4 octets seulement s'étend de -2147483648 à + 2147483647 (Voir cours d'informatique générale).
Les calculs effectués avec ce type de variable sont toujours très rapides, parce que le processeur de l'ordinateur est capable de traiter directement par lui-même de tels nombres entiers à 32 bits. En revanche, lorsqu'il est question de traiter des nombres entiers plus grands, ou encore des nombres réels (nombres « à virgule flottante »), les logiciels que sont les interpréteurs et compilateurs doivent effectuer un gros travail de codage/décodage, afin de ne présenter en définitive au processeur que des opérations binaires sur des nombres entiers de 32 bits au maximum.
Vous savez déjà que le type des variables Python est défini de manière dynamique.
Puisqu'il s'agit du type le plus performant (aussi bien en termes de vitesse de calcul qu'en termes d'occupation de place dans la mémoire), Python utilise le type "integer" par défaut, chaque fois que cela est possible, c'est-à-dire tant que les valeurs traitées sont des entiers compris entre les limites déjà mentionnées plus haut (environ 2 milliards, en positif ou en négatif).
Lorsque les valeurs traitées sont des nombres entiers se situant au-delà de ces limites, leur encodage dans la mémoire de l'ordinateur devient plus complexe. Les variables auxquelles on affecte de tels nombres sont alors automatiquement définies comme appartenant au type « entier long » (lequel est désigné par "long" dans la terminologie Python).
Ce type long permet l'encodage de valeurs entières avec une précision quasi infinie : une valeur définie sous cette forme peut en effet posséder un nombre de chiffres significatifs quelconque, ce nombre "n'étant limité que par la taille de la mémoire disponible sur l'ordinateur utilisé" !
Exemple :
Dans l'exemple ci-dessus, la valeur des nombres affichés augmente très rapidement, car chacun d'eux est égal au produit des deux termes précédents.
Au départ, les variables codice_4, codice_3 et codice_6 sont du type "integer", puisqu'on leur affecte des petites valeurs numériques entières : 3, 2 et 1.
À partir de la 8e itération, cependant, les variables b et a sont automatiquement converties l'une après l'autre dans le type "long" : le résultat de la multiplication des termes 6 et 7 est en effet déjà bien supérieur à la limite des 2 milliards évoquée plus haut.
La progression continue avec des nombres de plus en plus gigantesques, mais la vitesse de calcul diminue. Les nombres mémorisés sous le type "long" occupent une place variable dans la mémoire de l'ordinateur, en fonction de leur taille.
Les nombres à virgule flottante ("float").
Un nombre à virgule flottante est un nombre décimal qu'il est possible de représenter par sa mantisse et son exposant.
Par exemple, le nombre 125,789 est représentable par le couple (mantisse = 1,25789, exposant = 2). La mantisse étant toujours comprise entre -10 et 10 exclus.
Les nombres sont traduits par la formule formula_3. 
Les limites dépendent de l'architecture de la machine et sont équivalentes au type de donnée double du langage C.
Les littéraux peuvent s'écrire avec les chiffres, le caractère point pour indiquer la séparation entre la partie entière et la partie décimale et la lettre 'e' ou 'E' pour spécifier l'exposant.
Essayons donc ce type de données dans un nouveau petit programme :
Comme vous l'aurez certainement bien compris, nous affichons cette fois encore une série dont les termes augmentent extrêmement vite, chacun d'eux étant égal au produit des deux précédents. Au huitième terme, nous dépassons déjà largement la capacité d'un "integer". Au neuvième terme, Python passe automatiquement à la notation scientifique (« e+n » signifie en fait : « fois dix à l'exposant n »). Après le quinzième terme, nous assistons à nouveau à un dépassement de capacité (sans message d'erreur) : les nombres vraiment trop grands sont tout simplement notés « inf » (pour « infini »).
Le type "float" utilisé dans notre exemple permet de manipuler des nombres (positifs ou négatifs) compris entre 10e-308 et 10e+308 avec une précision de 12 chiffres significatifs. Ces nombres sont encodés d'une manière particulière sur 8 octets (64 bits) dans la mémoire de la machine : une partie du code correspond aux 12 chiffres significatifs, et une autre à l'ordre de grandeur (exposant de 10).
Les nombres complexes.
Python est un des rares langages à proposer un type de base pour les formula_5.
Un nombre complexe est un nombre composé d'une partie réelle et d'une partie imaginaire. On note formula_6 une des racines du polynôme formula_7.
Dans certains contextes, (comme la physique), la racine de -1 est notée j. C'est ce qui se fait en Python.
Un littéral complexe s'écrit donc : a + bj, avec a et b des variables de type float. Attention, j doit être précédé d'un nombre car sinon, Python l'interprétera comme étant la variable "j". Il ne doit pas y avoir d'espace entre ce nombre et "j".