2.1.4 Types numériques

Il y a quatre types numériques: les entiers, les entiers longs, les nombres flottants ou réels, et les nombres complexes. Les entiers sont implémentés avec le type long du langage C, qui assure au moins 32 bits de précision. Les entiers longs ont une précision illimitée. Les nombres flottants sont implémentés avec le type double du C. Toute supposition sur leur précision est hasardeuse, il faut se reporter aux caractéristiques de votre machine.

Les nombres complexes ont une partie imaginaire et une partie réelle, toutes les deux sont implémentées avec le type double du C. Pour extraire ces parties d'un nombre complexe z, il faut employer z.real et z.imag.

Les nombres sont créés lors de l'utilisation de valeurs numériques littérales ou bien comme résultat de fonctions ou d'opérateurs intégrés. Les valeurs littérales sans suffixe, y compris les nombres en hexadécimal et octal, donnent des entiers. Les valeurs littérales dotées d'un caractère suffixe "L" ou "l" donnent des entiers longs (il faut privilégier la notation avec "L" car "1l" est trop proche de onze !). Les valeurs numériques littérales contenant un point ou un signe d'exposant donnent des flottants. Enfin, les valeurs littérales dotées d'un caractère suffixe "J" ou "j" donnent des nombres complexes.

Python permet l'arithmétique sur des types numériques différents. Lorsqu'un opérateur numérique agit sur des opérandes de types différents, l'opérande avec le type le plus restrictif est traduit en type de l'autre opérande. L'entier est plus restrictif que l'entier long qui est plus restrictif que le flottant qui est plus restrictif que le nombre complexe. Il faut appliquer la même règle aux comparaisons entre types numériques différents.1Les fonctions int(), long(), float(), et complex() sont utilisées pour contraindre la traduction d'un nombre en un type numérique donné.

Les opérations suivantes sont applicables à tous les types numériques. Elles sont ordonnées par priorité croissante (même priorité dans une même case; toutes les opérations numériques ont une priorité supérieure aux opérations de comparaison).

Opération Résultat Notes 
x + ysomme de x et y 
x - ydifférence de x et y 
x * yproduit de x et y 
x / yquotient de x et y(1)
x % yreste de x / y 
-xx négatif 
+xx inchangé 
abs(x)valeur absolue ou magnitude de x 
int(x)conversion de x en entier(2)
long(x)conversion de x en entier long(2)
float(x)conversion de x en flottant 
complex(re,im)nombre complexe avec re en partie réelle et im en partie imaginaire. im vaut zéro par défaut. 
c.conjugate()valeur conjuguée du nombre complexe c 
divmod(x, y)la paire (x / y, x % y)(3)
pow(x, y)élévation de x à la puissance y 
x ** yélévation de x à la puissance y 

Notes:

(1)
Pour les entiers (y compris les entiers longs), le résultat de la division est un entier. Ce résultat est toujours arrondi à la borne entière inférieure: 1/2 donne 0, (-1)/2 donne -1, 1/(-2) donne -1, (-1)/(-2) donne 0. Il faut remarquer que le résultat est un entier long si un des deux opérandes est un entier long.

(2)
La conversion de flottant en entier (ou entier long) peut provoquer un arrondi ou une troncature comme en C. Voir les fonctions floor() et ceil() dans le module math pour les opérations de conversion.

(3)
Voir aussi 2.3, ``Fonctions intégrées'' pour une description plus complète.


Sous-sections
  1. Opérations des chaînes de bits appliquées aux types entiers



Notes

1
Dès lors, la liste [1, 2] est considérée égale à [1.0, 2.0]. Le comportement est identique pour les tuples.