π
<-
Chat plein-écran
[^]

Module TI-Python: précision virgule flottante + comparaisons

:32ti73: :32ti73e: :32ti73e2: :32ti76f: :32ti80: :32ti81: :32ti82: :32ti85: :32ti86: :32ti82s: :32ti82sf: :32ti82sfn: :32ti83: :32ti83p: :32ti83pb: :32ti83pr: :32ti83pfr: :32ti83pse: :32ti84p: :32ti84pse: :32ti84ppse: :32ti84pfr: :32ti84pcse: :32ti83pfrusb: :32ti82p: :32ti82a: :32ti84pce: :32ti83pce:

Module TI-Python: précision virgule flottante + comparaisons

Message non lude critor » 10 Déc 2018, 18:29

Dans un article précédent, nous avions vu que 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
$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: Tout sélectionner
def prec(b):
  k=0
  try:
    while 1+b**-k-1:
      k=k+1
  except:
    pass
  return k

Il suffit d'appeler prec(b)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
Selon la représentation interne choisie sur la machine concernée, la valeur retournée sera soit une limite exacte soit une estimation.

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 :
  • Casio Graph 35/75+E : 53 bits
  • Casio Graph 90+E : 53 bits
  • TI-Nspire : 53 bits
  • NumWorks : 53 bits
Image

53 bits soit environ 16 chiffres significatifs, ce qui est cohérent par rapport au math.pi==3.141592653589793. :bj:

Et du côté du module TI-Python pour TI-83 Premium CE, nous trouvons un résultat ridicule de 22 bits. :o
TI-83 Premium CE a écrit:>>>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)
9987100061000710002

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. :mj:

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.

9902Mais 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.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41465
Images: 14479
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude Lephe » 10 Déc 2018, 19:16

Est-ce un port de MicroPython qui tourne sur le périphérique externe ?
Avatar de l’utilisateur
LephePartenaire
Niveau 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Prochain niv.: 67.7%
 
Messages: 386
Inscription: 15 Juin 2018, 19:53
Genre: Homme
Calculatrice(s):
MyCalcs profile

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude critor » 10 Déc 2018, 19:32

Probablement du CircuitPython qui est un dérivé de MicroPython.

Plusieurs éléments non encore tous traités dans nos articles nous renvoient en effet à la pyboard Adafruit Trinket M0 :
https://www.adafruit.com/product/3500

Et effectivement bonne question, je lis que CircuitPython serait apparemment bridé en simple précision pour les flottants :
https://learn.adafruit.com/circuitpytho ... pectations

Si il est impossible de corriger cela du côté TI, ce serait très embêtant.
Je vois en effet nombre de scripts qui pourront produire facilement des résultats numériques complètement faux (au-delà des 5-10% de marge d'erreur) voir même complètement aberrants sans même l'avoir cherché.
Potentiellement tout ce qui est suites numériques définies par récurrence, et qui concernent donc la spécialité Mathématiques de Première Générale ainsi que toutes les Premières Technologiques.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41465
Images: 14479
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude Lionel Debroux » 10 Déc 2018, 22:07

Aïe. Que CircuitPython soit prévu pour utiliser des SPFPs est une chose, mais vu que tous les concurrents utilisent des DPFPs, justement parce que les résultats faux causés par l'utilisation de SPFPs sont inacceptables, TI va être obligé de suivre le mouvement...
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Avatar de l’utilisateur
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 11.2%
 
Messages: 6859
Inscription: 23 Déc 2009, 00:00
Localisation: France
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: -
GitHub: debrouxl

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude ptijoz » 10 Déc 2018, 22:28

Comme c'est un module externe, TI va vite se mettre au niveau des concurrents et ça ne leur coûtera pas bien cher (à mon avis)
Un peu poète, un peu geek, un peu écolo
Avatar de l’utilisateur
ptijoz
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 32.6%
 
Messages: 333
Images: 0
Inscription: 17 Oct 2018, 15:38
Localisation: France Loir et Cher
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: a la poursuite du vent et des etoiles.

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude critor » 10 Déc 2018, 22:54

@ptitjoz
Comme pour ce que j'en devine ils réutilisent CircuitPython qui est une implémentation qui si j'ai bien compris ne gère actuellement pas les entiers/flottants de plus de 32 bits, pas sûr que TI puisse se mettre au niveau, sauf à corriger l'implémentation.

Pas inenvisageable, mais puisqu'ils ont apparemment fait le choix de CircuitPython, à mon sens c'était justement pour ne pas s'embêter eux-mêmes avec ce qui concernait l'interprétion Python.

CircuitPython était peut-être un mauvais choix.



@Lionel
Le problème ce n'est pas juste la concurrence.
C'est aussi que 22 bits de mantisse c'est ridicule par rapport aux 40 bits du moteur de calcul historique des TI-z80 (et aussi Casio Graph) prévu pour faire des maths/sciences à la différence.
Avec des termes de suites récurrentes non entières sur 6-7 chiffres significatifs maximum, bonjour les résultats aberrants qui pourront débarquer après quelques itérations; ce que l'on n'obtenait pas aussi facilement avec le moteur de calcul historique.
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41465
Images: 14479
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor

Re: Module TI-Python: précision virgule flottante + comparai

Message non lude critor » 12 Déc 2018, 21:17

Je sors d'une formation TI-Python en ligne, où le présentateur utilisait les nouvelles versions .0010 :


Malheureusement, le problème de précision des flottants n'est clairement pas corrigé à ce jour, comme on peut le voir avec 51/7 et 9/7 :
Image
Avatar de l’utilisateur
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Prochain niv.: 41.8%
 
Messages: 41465
Images: 14479
Inscription: 25 Oct 2008, 00:00
Localisation: Montpellier
Genre: Homme
Calculatrice(s):
MyCalcs profile
YouTube: critor3000
Twitter/X: critor2000
GitHub: critor


Retourner vers News TI-z80 (TI-73, 76, 80, 81, 82, 83, 84, 85, 86)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 64 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1583 utilisateurs:
>1570 invités
>8 membres
>5 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)