Dans un article précédent, nous avions vu que
Aujourd'hui nous allons creuser cette anomalie en testant la précision des nombres en virgule flottante en Python.
math.pi
pour le module TI-Python de la TI-83 Premium CE c'était 3.14159, et non 3.141592653589793 comme sur toutes les solutions Python concurrentes.Aujourd'hui nous allons creuser cette anomalie en testant la précision des nombres en virgule flottante en Python.
Rappelons que les nombres flottants s'écrivent sous la forme
Voici un script Python conçu pour déterminer la précision de ces flottants, c'est-à-dire la taille maximale de la mantisse :
Il suffit d'appeler
Par la suite, nous nous en référerons au nombre de bits.
Pour référence, voici les limites déterminées selon le même algorithme avec le moteur de calcul historique des calculatrices :
$mathjax$M\times 10^E$mathjax$
avec M la mantisse et E l'exposant.Voici un script Python conçu pour déterminer la précision de ces flottants, c'est-à-dire la taille maximale de la mantisse :
- Code: Select all
def prec(b):
k=0
try:
while 1+b**-k-1:
k=k+1
except:
pass
return k
Il suffit d'appeler
prec(b)
où b est la base. Les valeurs de b usuelles sont :- 2 si l'on souhaite déterminer le nombre maximum de bits utilisables pour la mantisse
- 10 si l'on souhaite déterminer le nombre maximum de chiffres significatifs utilisables pour la mantisse
Par la suite, nous nous en référerons au nombre de bits.
Pour référence, voici les limites déterminées selon le même algorithme avec le moteur de calcul historique des calculatrices :
- HP Prime : 38 bits en mode numérique, 8598 bits en mode CAS
- TI-82/83/84 : 40 bits
- Casio Graph : 40 bits
- TI-Nspire : 46 bits en mode numérique, 3297 bits en mode CAS si disponible
- NumWorks : 1025 bits
- Casio fx-CP400 : 2032 bits
A part sur HP Prime, le Python utilise son propre moteur de calcul et il nous faut donc refaire les tests dans le contexte Python.
Effectivement, nous trouvons :
53 bits soit environ 16 chiffres significatifs, ce qui est cohérent par rapport au
Effectivement, nous trouvons :
- Casio Graph 35/75+E : 53 bits
- Casio Graph 90+E : 53 bits
- TI-Nspire : 53 bits
- NumWorks : 53 bits
53 bits soit environ 16 chiffres significatifs, ce qui est cohérent par rapport au
math.pi==3.141592653589793
. Et du côté du module TI-Python pour TI-83 Premium CE, nous trouvons un résultat ridicule de 22 bits.
(scripts exécutés pris en photo légèrement différents, mais les résultats restent valides)
22 bits soit environ 7 chiffres significatifs, ce qui est cohérent avec le
Visiblement, le module TI-Python implémente des flottants en simple précision (32 bits dont 22 bits de mantisse), et non en double précision comme la concurrence (64 bits dont 53 bits de mantisse), les bits restants dans les deux cas étant utilisés pour l'exposant ainsi que le signe de la mantisse.
TI-83 Premium CE wrote:>>>from prec import *
>>>prec(2)
22
>>>prec(10)
7
>>>
(scripts exécutés pris en photo légèrement différents, mais les résultats restent valides)
22 bits soit environ 7 chiffres significatifs, ce qui est cohérent avec le
math.pi==3.14159
, très insuffisant pour des applications scientifiques. Visiblement, le module TI-Python implémente des flottants en simple précision (32 bits dont 22 bits de mantisse), et non en double précision comme la concurrence (64 bits dont 53 bits de mantisse), les bits restants dans les deux cas étant utilisés pour l'exposant ainsi que le signe de la mantisse.
Mais ce qui est décrit ici, c'est ce qui a été constaté en octobre sur le stand de Texas Instruments aux journées APMEP 2018 puis congrès UdPPC 2018 avec un prototype DVT en version .0006. Le problème a bien évidemment été signalé, et peut-être a-t-il déjà été corrigé depuis ou le sera-t-il d'ici la livraison début 2019, nous l'espérons en tous cas.