π
<-

Module TI-Python disponible à l'unité chez Jarrety : 13,50€

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

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby critor » 04 Feb 2019, 12:36

A propos, au cas où ma boîte à lettres soit toujours vide ce soir...

Parmi ceux qui l'ont reçu, quelqu'un peut nous partager quelques photos du module final ? Avant et arrière ?

C'est à peu près tout ce qui nous manquerait pour une annonce 'propre' en page d'accueil.
Bien évidemment, les photos seront créditées. :)

Merci.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby zardam » 04 Feb 2019, 13:20

Pour le problème de précision, il ne faut rien attendre du coté d'adafruit, c'est "by design" dans la doc : https://learn.adafruit.com/circuitpytho ... pectations

Floating point numbers are single precision in CircuitPython (not double precision as in Python). The largest floating point magnitude that can be represented is about +/-3.4e38. The smallest magnitude that can be represented with full accuracy is about +/-1.7e-38, though numbers as small as +/-5.6e-45 can be represented with reduced accuracy.

CircuitPython's floats have 8 bits of exponent and 22 bits of mantissa (not 24 like regular single precision floating point), which is about five or six decimal digits of precision.


Je vais prendre quelques photos mais je ne suis pas très bon pour ça...
User avatar
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 34.6%
 
Posts: 233
Images: 13
Joined: 11 Oct 2017, 23:39
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby zardam » 04 Feb 2019, 13:29

102441024310242102411024010239
User avatar
zardamPremium
Niveau 9: IC (Compteur Infatigable)
Niveau 9: IC (Compteur Infatigable)
Level up: 34.6%
 
Posts: 233
Images: 13
Joined: 11 Oct 2017, 23:39
Gender: Not specified
Calculator(s):
MyCalcs profile

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby critor » 04 Feb 2019, 18:38

Bonsoir.

Merci beaucoup. :)
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby critor » 06 Feb 2019, 00:02

Le test de performances des QCC 2018 était basé sur un algo de seuil en flottants.
Mais puisque le module TI-Python a une gestion des flottants très inférieure, il ne serait pas équitable de baser un classement des performances numériques des pythonnettes là-dessus.

Partons donc sur autre chose, des entiers (courts) et des listes :
Code: Select all
try:
  from time import *
except:
  pass

def hastime():
  try:
    monotonic()
    return True
  except:
    return False

def genseed(ndigits):
  nmax,s,k=5*10**(ndigits-1),0,1
  while s<nmax:
    s+=k
    k*=2
  return s

def genarr(ndigits):
  sd,arr=genseed(ndigits),[]
  for k in range(1,ndigits):
    for j in range(ndigits):
      t=sd%10**k
      arr.extend([t,-t,10**k-t,t-10**k])
      sd=sd//10+(sd%10)*10**(ndigits-1)
  arr.extend([sd,-sd])
  return arr

def myabs(x):
  if x<0:
    x=-x
  return x

def sgn(x):
  if x!=0:
    return x/myabs(x)
  else:
    return 0

def sortarr(arr,sdiff):
  segs=[0,len(arr)-1]
  while len(segs):
    iref=segs[0]
    for k in range(segs[0],segs[1]+1):
      if sgn(arr[k]-arr[iref])==sdiff:
        t=arr[iref]
        arr[iref]=arr[k]
        arr[k]=arr[iref+1]
        arr[iref+1]=t
        iref+=1
    if iref>=segs[0]+2:
      segs.extend([segs[0],iref-1])
    if iref<=segs[1]-2:
      segs.extend([iref+1,segs[1]])
    segs.pop(0)
    segs.pop(0)
  return arr

def test(l,n):
  timed=hastime()
  if timed:
    start=monotonic()
  start,stop,sdiff,arr=0,1,-1,[]
  arr.extend(genarr(l))
  for k in range(n):
    arr.extend(sortarr(arr,sdiff))
    sdiff=-sdiff
  if timed:
    stop=monotonic()
  return stop-start,len(arr),arr[0],arr[len(arr)//2-1],arr[len(arr)//2],arr[len(arr)-1]

Ligne d'appel utilisée pour le test : test(9,2)

Voici le classement :
  1. TI-Nspire CX CR3- avec micropython : 3.71s
  2. TI-Nspire CX CR4+ avec micropython : 5.48s
  3. NumWorks : 10.50s
  4. Graph 90+E : 14.76s
  5. Graph 35+E/35+USB/75/95 SH4 avec CasioPython : 28.42s
  6. module externe TI-Python : 32.92s
  7. HP Prime G2 : 1min41.60s
  8. Graph 90+E avec KhiCAS : 3min39.64s
  9. HP Prime G1 : 4min29.49s
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby Lionel Debroux » 06 Feb 2019, 08:28

En d'autres termes, la plus lente des implémentations native de Python sur ce benchmark-ci, alors que c'est la seule qui utilise du SPFP, beaucoup moins précis. Ca serait donc beaucoup plus lent en DPFP, si bien sûr on parvenait à faire fonctionner du DPFP sur CircuitPython...
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 disponible à l'unité chez Jarrety : 13,

Unread postby Lionel Debroux » 06 Feb 2019, 12:10

J'essaie de debugger mon CircuitPython trafiqué qui calcule mal, en utilisant la target sim d'un vieux build de GDB 7.9 que j'avais réalisé sur ma machine pour le développement Nspire, il y a des années. Je connais la target sim depuis qu'ExtendeD l'avait utilisée très fructueusement pour les Nspire, cf. https://www.yaronet.com/topics/125502-d ... 4#post-117 .

Je confirme que le fait que les valeurs affichées dans CircuitPython soient stupides n'est manifestement pas un problème de conversion double -> string, puisque si on met les valeurs attendues dans les bons registres avant exécuter la conversion, on obtient la conversion attendue.
A suivre...

Obtention de la représentation binaire des double (sur x86_64, mais c'est la même sur ARM):
Code: Select all
$ perl -e 'print (pack "d", 10);' | od -t x1 -A x
000000 00 00 00 00 00 00 24 40
000008
$ perl -e 'print (pack "d", 101);' | od -t x1 -A x
000000 00 00 00 00 00 40 59 40
000008
$ perl -e 'print (pack "d", 101.2);' | od -t x1 -A x
000000 cd cc cc cc cc 4c 59 40
000008


Désassemblage du code dont la simulation m'intéresse:
Code: Select all
0001b648 <float_print.lto_priv.888>:
   1b648:       b510            push    {r4, lr}
   1b64a:       0004            movs    r4, r0
   1b64c:       b08a            sub     sp, #40 ; 0x28
   1b64e:       0008            movs    r0, r1
   1b650:       f7f7 f8f8       bl      12844 <mp_obj_float_get.lto_priv.1343.lto_priv.1422>
   1b654:       2300            movs    r3, #0
   1b656:       9301            str     r3, [sp, #4]
   1b658:       3310            adds    r3, #16
   1b65a:       9300            str     r3, [sp, #0]
   1b65c:       aa02            add     r2, sp, #8
   1b65e:       3357            adds    r3, #87 ; 0x57
   1b660:       f008 f8c2       bl      237e8 <mp_format_float.part.0.constprop.172>
   1b664:       a902            add     r1, sp, #8


Il a fallu changer l'adresse de démarrage de l'ELF, octets 0x18-0x1B, de 00 20 00 00 en a0 d1 00 00 (Reset_Handler).

Trace d'exécution:
Code: Select all
arm-none-eabi-gdb
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) file ports/atmel-samd/build-trinket_m0/firmware.elf
Reading symbols from ports/atmel-samd/build-trinket_m0/firmware.elf...done.
(gdb) target sim
Connected to the simulator.
(gdb) load ports/atmel-samd/build-trinket_m0/firmware.elf
Loading section .text, size 0x2da1c vma 0x2000
Loading section .ARM.exidx, size 0x8 vma 0x2fa1c
Loading section .data, size 0x130 vma 0x20000000
Start address 0xd1a0
Transfer rate: 1497760 bits in <1 sec.
(gdb) break Reset_Handler
Breakpoint 1 at 0xd1a8
(gdb) run
Starting program: .../ports/atmel-samd/build-trinket_m0/firmware.elf
^C
Program received signal SIGINT, Interrupt.
0xf748f550 in ?? ()
(gdb) set $r0=0
(gdb) set $r1=0x40240000
(gdb) set $pc=0x1B654
(gdb) info registers
r0             0x0      0
r1             0x40240000       1076101120
r2             0x0      0
r3             0x67     103
r4             0xffffffff       4294967295
r5             0x0      0
r6             0x0      0
r7             0x0      0
r8             0x0      0
r9             0x0      0
r10            0x0      0
r11            0xe59ff838       3852466232
r12            0x0      0
sp             0x800    0x800
lr             0xd1e4   53732
pc             0x1b654  0x1b654 <float_print.lto_priv+12>
cpsr           0x1000033        16777267
(gdb) advance *0x1B664
0x0001b664 in float_print.lto_priv ()
(gdb) x/s ($sp+8)
0x808:  "10"
(gdb) set $r0=0
(gdb) set $r1=0x40594000
(gdb) set $pc=0x1B654
(gdb) advance *0x1B664
0x0001b664 in float_print.lto_priv ()
(gdb) x/s ($sp+8)
0x808:  "101"
(gdb) set $r0=0xcccccccd
(gdb) set $r1=0x40594ccc
(gdb) set $pc=0x1B654
(gdb) advance *0x1B664
0x0001b664 in float_print.lto_priv ()
(gdb) x/s ($sp+8)
0x808:  "101.2"
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 disponible à l'unité chez Jarrety : 13,

Unread postby Lionel Debroux » 06 Feb 2019, 12:50

A partir du code de float_make_new(), qui est juste au-dessous de float_print() dans objfloat.c, j'ai cherché la définition de mp_obj_new_float(), et je suis tombé sur les différentes définitions de cette fonction en fonction de la représentation des objets MicroPython. Il y en a 4, MICROPY_OBJ_REPR_A à _D. CircuitPython pour cette target utilise MICROPY_OBJ_REPR_C .
Les différentes valeurs possibles sont décrites en détail dans mpconfig.h:
Code: Select all
// A MicroPython object is a machine word having the following form (called R):
//  - iiiiiiii iiiiiiii iiiiiiii iiiiiii1 small int with 31-bit signed value
//  - 01111111 1qqqqqqq qqqqqqqq qqqqq110 str with 20-bit qstr value
//  - s1111111 10000000 00000000 00000010 +/- inf
//  - s1111111 1xxxxxxx xxxxxxxx xxxxx010 nan, x != 0
//  - seeeeeee efffffff ffffffff ffffff10 30-bit fp, e != 0xff
//  - pppppppp pppppppp pppppppp pppppp00 ptr (4 byte alignment)
// Str and float stored as O = R + 0x80800000, retrieved as R = O - 0x80800000.
// This makes strs easier to encode/decode as they have zeros in the top 9 bits.
[b]// This scheme only works with 32-bit word size and float enabled.[/b]
#define MICROPY_OBJ_REPR_C (2)


Bref. Il y a peut-être des problèmes additionnels, qu'il faudra découvrir ultérieurement, mais l'utilisation de la représentation C est largement suffisante pour que mp_float_t == double plutôt que float se passe très mal :)

La représentation D n'est manifestement pas faite pour les plate-formes 32 bits:
Code: Select all
// A MicroPython object is a 64-bit word having the following form (called R):
//  - seeeeeee eeeeffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff 64-bit fp, e != 0x7ff
//  - s1111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000 +/- inf
//  - 01111111 11111000 00000000 00000000 00000000 00000000 00000000 00000000 normalised nan
//  - 01111111 11111101 iiiiiiii iiiiiiii iiiiiiii iiiiiiii iiiiiiii iiiiiii1 small int
//  - 01111111 11111110 00000000 00000000 qqqqqqqq qqqqqqqq qqqqqqqq qqqqqqq1 str
//  - 01111111 11111100 00000000 00000000 pppppppp pppppppp pppppppp pppppp00 ptr (4 byte alignment)
// Stored as O = R + 0x8004000000000000, retrieved as R = O - 0x8004000000000000.
// This makes pointers have all zeros in the top 32 bits.
// Small-ints and strs have 1 as LSB to make sure they don't look like pointers
// to the garbage collector.
#define MICROPY_OBJ_REPR_D (3)

et de toute façon, j'ai très vite des erreurs de compilation si je tente de l'utiliser.

La représentation B:
Code: Select all
// A MicroPython object is a machine word having the following form:
//  - xxxx...xx01 : a small int, bits 2 and above are the value
//  - xxxx...xx11 : a qstr, bits 2 and above are the value
//  - xxxx...xxx0 : a pointer to an mp_obj_base_t (unless a fake object)
#define MICROPY_OBJ_REPR_B (1)

compile du premier coup, sans nécessiter de modifs supplémentaires du code, et le binaire produit est à peine plus gros qu'avec la représentation C:

Code: Select all
LINK build-trinket_m0/firmware.elf

1080 bytes free in flash out of 188416 bytes ( 184.0 kb ).
26060 bytes free in ram for stack out of 32768 bytes ( 32.0 kb ).

Create build-trinket_m0/firmware.bin
Create build-trinket_m0/firmware.uf2
Converting to uf2, output size: 374784, start address: 0x2000
Wrote 374784 bytes to build-trinket_m0/firmware.uf2.


A vous de tester, merci d'avance :)
You do not have the required permissions to view the files attached to this post.
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 disponible à l'unité chez Jarrety : 13,

Unread postby Adriweb » 06 Feb 2019, 14:53

Ca a l'air de bien marcher, félicitations :)

Code: Select all
>>> 1+1
2
>>> 0.1+0.2
0.3
>>> 1e2+1e3
1100.0
>>> cos(0)
1.0
>>> cos(0.0)
1.0
>>> sin(pi)
1.224646799147353e-16
>>> cos(pi)
-1.0
>>> pi
3.141592653589793
>>> pow(2,3)
8.0
>>> pow(2,15)
32768.0
>>> pow(2,20)
1048576.0
>>> pow(3,20)
3486784401.0
>>> pow(3,24)
282429536481.0
>>> trunc(2.03)
2
>>> log(123,3)
4.380238966019956

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
My calculator programs
Mes programmes pour calculatrices
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 78.9%
 
Posts: 14744
Images: 1119
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

Re: Module TI-Python disponible à l'unité chez Jarrety : 13,

Unread postby critor » 06 Feb 2019, 14:55

Ah, génial ! :bj:
Problème corrigé avant même que l'on annonce son existence ! :D

Donc maintenant, faut injecter ça dans le firmware de TI dont nous n'avons pas le code source, histoire que ça communique bien avec l'appli PyAdaptr de la TI-83PCE.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 47.9%
 
Posts: 41980
Images: 15866
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

PreviousNext

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

Who is online

Users browsing this forum: ClaudeBot [spider] and 10 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.
730 utilisateurs:
>678 invités
>45 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)