Et justement, parmi les allègements il y en a un qui est particulièrement problématique dans le contexte du lycée scientifique, c'est la précision des nombres flottants.
Les nombres non entiers, qu'ils soient décimaux ou réels, sont représentés en
Python en virgule flottante, soit au format
$mathjax$\pm M\times 2^{E-E_{min}}$mathjax$
avec
$mathjax$M\in [1;2[$mathjax$
.
Or, toutes les calculatrices n'accordent pas le même nombre de bits pour coder la mantisse M et l'exposant E de ces nombres, ce qui limite leur nombre de chiffres significatifs.
Voici la transcription
Python d'un algorithme permettant de calculer les nombres de bits et de chiffres significatifs utilisables pour les mantisses de flottants, ceci en appelant respectivement
precm(2)
et
precm(10)
:
- Code: Select all
def precm(b):
k,b=0,float(b)
while 1+b**-k-1>0:
k+=1
return k
Précisons que selon les modèles, le test devra être réalisé deux fois, car bien souvent l'environnement
Python utilisera un moteur de calcul spécifique totalement déconnecté du reste de la calculatrice.
Voici le petit classement de différents appareils scolaires en termes de précision binaire et décimale qui en découle, du meilleur au pire :
modèles | bits | chiffres significatifs |
Graph 90+E / fx-CG50 (Python) Graph 35/75/85/95 USB / fx-9750GII/9860G (CasioPython) NumWorks (Python) TI-Nspire[ (MicroPython) | 53 | 16 |
HP Prime (CAS) | 48 | 15 |
Graph 90+E / fx-CG10/20/50 (KhiCAS) NumWorks (hors Python) TI-82/85/86/89/92 / Voyage 200 TI-Nspire (hors MicroPython) | 45 | 14 |
TI-81 | 41 | 13 |
fx-92 Collège 2D / Spéciale Collège / fx-ES/EX Graph 90+E / fx-CG50 (hors Python et KhiCAS) Graph 35/75/85/95 USB / fx-9750GII/9860G (hors CasioPython) fx-CG10/20 (hors KhiCAS) Sharp EL-9900/9950 TI-73/76.fr/83/84 / 82 Stats/Plus/Advanced | 40 | 13 |
HP Prime (hors CAS) | 38 | 12 |
Lexibook GC3000FR | 35 | 11 |
TI-Primaire Plus | 34 | 11 |
TI-Collège Plus / 30/34/36 MultiView | 32 | 10 |
fx-CP400/CG500 / Classpad | 31 | 10 |
module externe TI-Python | 22 | 7 |
Pour référence, 53 bits correspondent à ce qui est appelé la double précision dans le contexte du Python, et 24 bits à la simple précision.Comme tu peux le voir, les premiers modules externes
TI-Python à avoir été livrés ont un très grave défaut, avec une précision en virgule flottante nettement inférieure à celle de la
TI-83 Premium CE, et dégraderont donc ses capacités de calcul !
Cette précision est même inférieure à celle qu'offre l'étron intergalactique
Lexibook GC3000FR, et même pire encore à celles qui ont été jugées nécessaires pour les
TI/Casio scientifiques de collège ou pour les
TI/Casio de primaire... et également inférieure à celle des flottants
Python simple précision normaux !
Par conséquent, avec des résultats intermédiaires et finaux bridés sur 7 chiffres significatifs, nombre d'activités numériques au programme du lycée scientifique - notamment lorsqu'il y a enchaînement de différents calculs
(polynômes du second degré, suites récurrentes, nombre dérivé, matrices, itérations de boucles, fonctions récursives...) conduiront à des résultats faux, aberrants ou même totalement inexploitables, beaucoup plus facilement sur le module externe
TI-Python que sur les solutions concurrentes !
Dans le
test dédié précédemment évoqué, nous avons mentionné des exemples de résultats faux.
De la part d'
Adafruit, cette utilisation des flottants simple précision vient d'un allègement volontaire de
MicroPython, afin de minimiser la consommation de ressources sur ses cartes
Trinket/Feather M0, qui ont des caractéristiques matérielles très faibles.
Adafruit semble ne pas avoir pensé ses cartes pour le contexte scientifique du lycée, mais davantage pour servir dans des projets techniques ou encore comme jouet d'éveil au
Python pour les écoliers/collégiens.
Même si cette base matérielle et logicielle semble être une bonne solution pour minimiser les coûts de production, vouloir construire un produit pour le lycée scientifique en partant de ça n'était-il pas une erreur ?... And precisely, one of the changes which aim at producing more lightweight builds is especially harmful for science-oriented high school teaching purposes, is the prevision of floating-point numbers.
Non-integer numbers, be them decimal or real, are represented as floating-point values in
Python, that is in the
$mathjax$\pm M\times 2^{E-E_{min}}$mathjax$
format, with
$mathjax$M\in [1;2[$mathjax$
.
As a matter of fact, calculators use different bit counts for encoding the mantissa M and the exponent E, which caps the number of significant figures.
Here is the
Python translation of an algorithm computing the number of bits and the number of significant digits usable for floating-point number mantissas, by calling respectively
precm(2)
and
precm(10)
:
- Code: Select all
def precm(b):
k,b=0,float(b)
while 1+b**-k-1>0:
k+=1
return k
On some models, this test needs to be performed twice, as the
Python environment often uses a specific computations engine, completely disconnected from the rest of the calculator's operation.
Here is the rundown of school calculators in terms of binary / decimal accuracy, from best to worst:
models | bits | significant digits |
Graph 90+E / fx-CG50 (Python) Graph 35/75/85/95 USB / fx-9750GII/9860G (CasioPython) NumWorks (Python) TI-Nspire[ (MicroPython) | 53 | 16 |
HP Prime (CAS) | 48 | 15 |
Graph 90+E / fx-CG10/20/50 (KhiCAS) NumWorks (outside Python) TI-82/85/86/89/92 / Voyage 200 TI-Nspire (outside MicroPython) | 45 | 14 |
TI-81 | 41 | 13 |
fx-92 Collège 2D / Spéciale Collège / fx-ES/EX Graph 90+E / fx-CG50 (outside Python and KhiCAS) Graph 35/75/85/95 USB / fx-9750GII/9860G (outside CasioPython) fx-CG10/20 (outside KhiCAS) Sharp EL-9900/9950 TI-73/76.fr/83/84 / 82 Stats/Plus/Advanced | 40 | 13 |
HP Prime (hors CAS) | 38 | 12 |
Lexibook GC3000FR | 35 | 11 |
TI-Primaire Plus | 34 | 11 |
TI-Collège Plus / 30/34/36 MultiView | 32 | 10 |
fx-CP400/CG500 / Classpad | 31 | 10 |
TI-Python Adapter | 22 | 7 |
For reference, 53 bits correspond to what is termed double precision in the context of Python, and 24 bits correspond to simple precision.As you can see, the first external
TI-Python Adapter modules delivered to customers are thoroughly crippled by floating-point precision much lower than that of the
TI-83 Premium CE, and therefore lower its computation abilities very much !
This precision is even lower than that of the
Lexibook GC3000FR intergalactic PoS, or even worse, lower than the ones deemed necessary for the
TI/Casio scientific calculators aimed at primary and secondary calculators... and lower than that of normal
Python single precision floating-point values !
Therefore, with intermediate and final results truncated to 7 significant digits, many numerical activities used in scientific high school level math classes - especially when chaining / iterating multiple computations
(quadratic polynomials, recurrent sequences, derived number, matrices, loop iterations, recursive functions...) simply produce wrong, stupid or even completely unusable results, much more easily on the
TI-Python Adapter than on competitors' solutions !
In the aforementioned
detailed test, we listed multiple instances of wrong results.
As far as
Adafruit is concerned, using single precision floating-point values stems from a voluntary reduction of
MicroPython, in order to reduce the foorprint on their
Trinket/Feather M0 boards, whose hardware characteristics are very weak.
Adafruit doesn't seem to have designed boards for the purpose of targeting scientific high schools, they probably target technical projects or baby
Python activity steps for pupils younger than high schoolers.
Even if such hardware and software seem to be a good method to reduce production costs, maybe trying to use them as a starting point for building a product targeting scientific high school teaching purposes was a mistake, huh ?