Aller au contenu

Le module math⚓︎

Le module math propose des fonctions utiles en arithmétique, mais

Mauvaise pratique

On peut calculer les dix derniers chiffres du plus grand nombre premier connu à la fin de l'année 2018 ainsi :

>>> pow(2, 82_589_933, 10_000_000_000) - 1
5217902591
>>> from math import *
>>> pow(2, 82_589_933, 10_000_000_000) - 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pow expected 2 arguments, got 3

La seconde tentative a échoué à cause de from math import *

En effet, l'import du module math s'est accompagné d'une fonction math.pow qui a écrasé la fonction native pow différente.

⚠ On n'importe que ce dont on a besoin !

Bonne pratique

Vous avez besoin des fonctions sqrt, factorial, gcd et comb ?

Alors n'importez que celles-ci !

>>> from math import sqrt, factorial, gcd, comb
>>> factorial(5)
120

Autre pratique

On peut aussi faire import math, dans ce cas, les constantes et fonctions se font appeler en préfixant par math.

>>> import math
>>> math.factorial(5)
120
>>> math.pi
3.141592653589793

L'intérêt est de pouvoir conserver l'utilisation d'une fonction native et/ou d'autres fonctions d'autres modules qui auraient le même identifiant !

🧱 Un seul import suffit pour l'ensemble d'un script, ou d'une session console.

La documentation sur le module math nous propose, entre autres

sqrt(x) ; racine carrée de x⚓︎

Pour square root ; la racine carrée, le résultat est toujours un flottant.

>>> sqrt(49)
7.0
>>> sqrt(1e300)
1e+150
>>> sqrt(1e-300)
1e-150
>>> sqrt(-5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>>
  1. \(\sqrt{49} = 7\)
  2. \(\sqrt{1×10^{300}} = 1×10^{150}\)
  3. \(\sqrt{1×10^{-300}} = 1×10^{-150}\)
  4. \(\sqrt{-5}\) provoque une erreur, \(-5\) n'est pas dans le domaine de définition.

⚠ Pensez à lire les messages d'erreurs ; ils sont souvent très explicites. N'ayez pas peur !

ceil(x) ; partie entière par excès de x⚓︎

Renvoie la partie entière par excès de x.

Ceil ; plafond en anglais.

>>> from math import ceil
>>> effectif = 587
>>> capacité = 45
>>> début = f"Il faut {ceil(effectif / capacité)} bus pour"
>>> suite = f" transporter {effectif} personnes dans"
>>> fin   = f" des bus de {capacité} places."
>>> début + suite + fin
Il faut 14 bus pour transporter 587 personnes dans des bus de 45 places.
>>> 

floor(x) ; partie entière par défaut de x⚓︎

Renvoie la partie entière par défaut de x.

Floor ; sol en anglais.

>>> from math import floor
>>> production = 5870
>>> unité = 0.75
>>> début = f"On peut remplir {floor(production / unité)} bouteilles"
>>> suite = f" de {unité} litres avec"
>>> fin   = f" un apport de {production} litres."
>>> début + suite + fin
On peut remplir 7826 bouteilles de 0.75 litres avec un apport de 5870 litres.
>>>

⚠ Les fonctions int et floor coïncident sur \(\mathbb R^+\), mais pas sur \(\mathbb R^-\) !

>>> int(7.5)
7
>>> floor(7.5)
7
>>> int(-7.5)
-7
>>> floor(-7.5)
-8

exp(x) ; exponentielle de x⚓︎

Renvoie \(e\) à la puissance x, où \(e = 2.718281…\) est la base des logarithmes naturels. Cela est en général plus précis que math.e ** x ou pow(math.e, x).

Fonctions trigonométriques⚓︎

cos, acos, sin, asin, tan, atan utilisent les angles en radians.