English version: viewtopic.php?f=41&t=22328&lang=en
Edit update: TI fixed the floating point issue in the new version
L'implémentation Python sur le module TI-Python est donc celle développée tout spécialement par Adafruit pour ces cartes, un CircuitPython en version 3.0.0. C'est un fork de MicroPython comportant d'importants changements dans le code, certains visant probablement un peu plus de légèreté pour tourner un peu mieux sur des cartes vraiment peu puissantes.
The TI-Python Adapter's Python implementation is the one tailor-made by AdaFruit for their boards, CircuitPython, version 3.0.0. This MicroPython fork contains widespread code changes, some of which probably aim at slightly reducing the footprint for running better on really underpowered hardware.
Les nombres non entiers, qu'ils soient décimaux ou réels, sont représentés en Python en virgule flottante, soit au format
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 ?...
Non-integer numbers, be them decimal or real, are represented as floating-point values in Python, that is in the
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 ?
- la gestion des nombres complexes (Terminales S/STI2D/STL): le module cmath et donc les fonctions complexes qu'il fournit
- les fonctions mathématiques spéciales, notamment de trigonométrie hyperbolique, présentes sur certaines autres implémentations de Python sur calculatrice mais pas dans le firmware 3.0.0.12 du TI-Python Adapter.
- les entiers longs, un peu plus longs (64 bits) dans une version et vraiment plus longs dans l'autre - présents dans toutes les autres implémentations de Python sur calculatrice
Une des versions du firmware fournit également d'autres modules : os et storage (io a fait une courte apparition, il a été enlevé pour des raisons de place)
A moins que quelqu'un trouve une idée pour gagner des kilo-octets supplémentaires sans réduire la fonctionnalité, il n'y a pas de marge de manoeuvre pour faire évoluer le produit ultérieurement - une nouvelle fois, contrairement à la plupart des solutions Python calculatrice concurrentes.
- complex math functionality
- special math functions
- long integers
Unless someone has an idea to save multiple additional KBs of Flash memory without reducing functionality, there's no spare room left in the Flash memory to provide later product improvements to consumers - again, unlike most competing Python solutions for calculators.
C'est donc au code firmware modifié par Texas Instruments qu'il faudrait apporter ces mêmes modifications, mais malheureusement à la différence ce code n'est pas public à notre connaissance.
A défaut donc d'une réouverture du code que Texas Instruments a repris en le fermant, les modifications en question sont tenues gracieusement à la disposition de la communauté et du constructeur. Espérons...
These modifications should therefore be applied direclty into Texas Instruments's modified firmware, but unfortunately, its code isn't published anywhere, as far as we can tell. These modifications are provided to the community and the manufacturer, let's hope that TI integrates them, and even opens up their source code, why not...
Binaires prêts à l'emploi : dernière version actuelle à viewtopic.php?f=41&t=22328&p=240032#p240032 . D'une manière générale, en pièces jointes des posts de ce topic, et auparavant, de viewtopic.php?f=41&t=22242&start=80#p239474 .
Code source : avec les binaires, sous forme de diff, et https://github.com/debrouxl/circuitpython .
Texte de la news: critor (le gros du texte), Lionel (quelques parties, la traduction anglaise).
Readily usable binaries: latest version at viewtopic.php?f=41&t=22328&p=240287#p240287 . In general, binaries are posted as attachments in this topic, and earlier, at viewtopic.php?f=41&t=22242&start=80#p239474 and subsequent posts.
Source code: alongside the binaries in diff form, and https://github.com/debrouxl/circuitpython .
News writing credits: critor (the bulk of the text), Lionel (select parts, the English translation.