Cet exercice n'a pas d'autre intérêt que permettre aux élèves d'interpréter la définition d'une fonction écrite en Python.
On considère la fonction ci-dessous, écrite en Python :
def f(x):
y = 2*(x+3)
y = y+x
return y/3-2
On considèrera que le calcul sur les float
est mathématiquement
correct.
- Quelle est la valeur de
f(-2)
? - Déterminer les images de
5
puis de0
par cette fonctionf
. Que constate-t-on ? - Donner une expression simplifiée de la fonction
f
en fonction dex
. Conclure.
- Question 1°/
- Question 2°/
- Question 3°/
- Commentaire
Valeur de x en paramètre : |
-2 |
---|---|
1ère valeur de y : |
2*(-2+3) = 2 |
2ème valeur de y : |
2 + (-2) = 0 |
Valeur renvoyée par f : |
0/3 - 2 = -2 |
Valeur de x en paramètre : |
0 |
---|---|
1ère valeur de y : |
2*(0+3) = 6 |
2ème valeur de y : |
6 + 0 = 6 |
Valeur renvoyée par f : |
6/3 - 2 = 0 |
Valeur de x en paramètre : |
5 |
---|---|
1ère valeur de y : |
2*(5+3) = 16 |
2ème valeur de y : |
16 + 5 = 21 |
Valeur renvoyée par f : |
21/3 - 2 = 5 |
On constate que la valeur renvoyée par la fonction f
semble égale à la valeur entrée en paramètre de f
.
Valeur de x en paramètre : |
x |
---|---|
1ère valeur de y : |
2*(x+3) = 2*x + 6 |
2ème valeur de y : |
2*x + 6 + x = 3*x + 6 |
Valeur renvoyée par f : |
(3*x + 6)/3 - 2 = x + 2 - 2 = x |
Avec un algorithme, on supposera (au moins en classes de Lycée) travailler avec les objets mathématiques.
Avec un programme, l'interprétation est nécessairement soumise à l'implémentation de ces objets mathématiques en machine.
Si l'on teste par exemple le calcul de f(2.11)
, on obtient 2.1099999999999994
,
c'est à dire une image distincte de l'antécédent. C'est la raison pour laquelle, l'exercice commence par la phrase
"On considèrera que le calcul sur les float
est mathématiquement
correct.". Et c'est la raison pour laquelle on ne raisonnera pas avec les élèves en général sur un programme : on raisonne
sur un algorithme, qui manipule les objets idéaux des mathématiques.
Ci-dessous un programme avec une plage de données sur laquelle environ 50% des valeurs de x sont telles que \( f(x) \neq x \) en machine (où $f$ est la fonction de notre exercice) :
def f(x):
y = 2*(x+3)
y = y+x
return y/3-2
compteur_diff = 0
for k in range(0,1000):
x = k/100 # on teste 0, 0.01, 0.02, 0.03, 0.04, ..., 9.99
if x != f(x) :
compteur_diff += 1
print(compteur_diff/1000)