π
<-

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

Unread postby critor » 10 Dec 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: 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)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 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)
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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby Lephe » 10 Dec 2018, 19:16

Est-ce un port de MicroPython qui tourne sur le périphérique externe ?
User avatar
LephePartenaire
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 16.8%
 
Posts: 387
Images: 42
Joined: 15 Jun 2018, 19:53
Gender: Male
Calculator(s):
MyCalcs profile

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

Unread postby critor » 10 Dec 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby Lionel Debroux » 10 Dec 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.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.3%
 
Posts: 6865
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

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

Unread postby ptijoz » 10 Dec 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 rêveur, un peu écolo.
https://joz.alwaysdata.net/info/
User avatar
ptijoz
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 34.3%
 
Posts: 334
Images: 0
Joined: 17 Oct 2018, 15:38
Location: France Loir et Cher
Gender: Male
Calculator(s):
MyCalcs profile
Class: a la poursuite du vent et des etoiles.

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

Unread postby critor » 10 Dec 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

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

Unread postby critor » 12 Dec 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
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 48.1%
 
Posts: 41993
Images: 15900
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor


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

Who is online

Users browsing this forum: No registered users and 5 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1037 utilisateurs:
>970 invités
>60 membres
>7 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)