π
<-
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:
Online

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: 13.5%
 
Posts: 37162
Images: 10310
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
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 10: GR (Guide de Référence)
Niveau 10: GR (Guide de Référence)
Level up: 1.5%
 
Posts: 299
Joined: 15 Jun 2018, 19:53
Gender: Male

Online

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: 13.5%
 
Posts: 37162
Images: 10310
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
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: 8.7%
 
Posts: 6655
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
Class: -
GitHub: debrouxl

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

Unread postby ptitjoz » 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)
User avatar
ptitjoz
Niveau 13: CU (Calculateur Universel)
Niveau 13: CU (Calculateur Universel)
Level up: 4.9%
 
Posts: 254
Images: 0
Joined: 17 Oct 2018, 15:38
Location: France Loir et Cher
Gender: Male
Calculator(s):

Online

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: 13.5%
 
Posts: 37162
Images: 10310
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
GitHub: critor

Online

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: 13.5%
 
Posts: 37162
Images: 10310
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti
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 15 guests

-
Search
-
Social
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.2 pour les Nspire CX II
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
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.
449 utilisateurs:
>433 invités
>9 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)