format en héxadécimal des nombres réels
2 participants
Page 1 sur 1
format en héxadécimal des nombres réels
Bonjour,
suite à quelques essais avec le débugueur de VTI, j'ai réussit à trouver sous quel format étaient stoké les nombres réels (testé que avec une rom de TI82stats.fr)
en fait, sur les 15 octés, seuls 9 contiennent réellement le nombre, le reste servant propablement à la VAT (Variables Allocation Table : endroit de la mémoire ou sont listé totes les variables avec leur caractéristiques esssentielles : nom, type, taille, emplacement dans la mémoire, ...)
Bref, voici le format que j'ai trouvé avec mes tests :
SPCCCCCCC (chaque lettre représentant un octé)
avec S le signe du nombre : 0 si positif ou nul ; 80h si négatif (c'est à 128d)
P la puissance de 10 : le nombre constitué des chiffres significatifs (les C) est multiplié par 10d^(Ph-80h)
enfin, les chiffres sont utilisé comme s'il s'agissaite de nombres à 2 chiffres décimaux : par example 20d sera écrit 20h (ce qui laisse à penser que la TI éffectue directement les calculs en base 10 et ne passe pas par l'héxadécimal) : on a donc avec les 7 C un nombre en base 10 de 14 chiffres. le nombre ainsi formé doit être considéré comme étant une nombre avec un chiffre non nul avant la virgule et 13 autres derière.
On retrouve donc un peu la notation scientifique.
Pour finir, quelques examples pour illustrer/clarifier:
a)
00h 80h 00h 00h 00h 00h 00h 00h 00h
le 00h du début indique que le nombre est positif ou nul
le 80h indique qu'il faudra multiplier le tout pat 10d^(80h-80h)=1
le 00h 00h 00h 00h 00h 00h 00h indique que les chiffres significatifs sont 0.0 00 00 00 00 00 00
le nombre vaut donc +0.0000000000000*1=0
b)
80h 82h 12h 34h 56h 78h 90h 12h 34h
le 80h du début indique que le nombre strictement négatif
le 82h indique qu'il faudra multiplier le tout pat 10d^(82h-80h)=10d^(2h)=10d^(2d)=100 (car 2h=2d)
le 12h 34h 56h 78h 90h 12h 34h indique que les chiffres significatifs sont 1.2 34 56 78 90 12 34
le nombre vaut donc -1.2345678901234*100=-123.45678901234
Remarques1 : si un des chiffres C contient un chiffre héxadécimal strictement supérieur à 9 (ce qu'on ne peut normalement pas optenir en basic), alors le nombre affichera des caractères bizards ; si le premier octé des C vaut 00h, alors le nombre vaut forcément 0 ; si le premier octé des C vaut 0Nh avec N un chiffre héxadécimal inférieur ou égal à 9, alors on optient un nombre normal, sauf que avant l'aplication de la puissance de 10, le chiffre avant la virgule est le 0
Remarque2 : ce mode de stoquage à pour inconvéniant d'énormes pertes de capacitées de stoquage :
-la puissance de 10 pourait aller de -128 à 127 au lieux de -99 à 99
-le nombre de chiffres significatifs pourrait être de 16 voir de 18 si on ne réservait qu'un bit au signe (vu qu'il n'i a que 2 états, ça suffit) et en attribuant le reste aux chiffres significatifs
-on pourrait éalement avoir 16 chiffres significatifs et une puissance de 10 allant de -16384 à 16383
Sandro
PS : quand je met d derière un nombre, c'est pour indiquer qu'il est en base 10, et quand je meth, c'est que c'est en base héxadécimale (16)
suite à quelques essais avec le débugueur de VTI, j'ai réussit à trouver sous quel format étaient stoké les nombres réels (testé que avec une rom de TI82stats.fr)
en fait, sur les 15 octés, seuls 9 contiennent réellement le nombre, le reste servant propablement à la VAT (Variables Allocation Table : endroit de la mémoire ou sont listé totes les variables avec leur caractéristiques esssentielles : nom, type, taille, emplacement dans la mémoire, ...)
Bref, voici le format que j'ai trouvé avec mes tests :
SPCCCCCCC (chaque lettre représentant un octé)
avec S le signe du nombre : 0 si positif ou nul ; 80h si négatif (c'est à 128d)
P la puissance de 10 : le nombre constitué des chiffres significatifs (les C) est multiplié par 10d^(Ph-80h)
enfin, les chiffres sont utilisé comme s'il s'agissaite de nombres à 2 chiffres décimaux : par example 20d sera écrit 20h (ce qui laisse à penser que la TI éffectue directement les calculs en base 10 et ne passe pas par l'héxadécimal) : on a donc avec les 7 C un nombre en base 10 de 14 chiffres. le nombre ainsi formé doit être considéré comme étant une nombre avec un chiffre non nul avant la virgule et 13 autres derière.
On retrouve donc un peu la notation scientifique.
Pour finir, quelques examples pour illustrer/clarifier:
a)
00h 80h 00h 00h 00h 00h 00h 00h 00h
le 00h du début indique que le nombre est positif ou nul
le 80h indique qu'il faudra multiplier le tout pat 10d^(80h-80h)=1
le 00h 00h 00h 00h 00h 00h 00h indique que les chiffres significatifs sont 0.0 00 00 00 00 00 00
le nombre vaut donc +0.0000000000000*1=0
b)
80h 82h 12h 34h 56h 78h 90h 12h 34h
le 80h du début indique que le nombre strictement négatif
le 82h indique qu'il faudra multiplier le tout pat 10d^(82h-80h)=10d^(2h)=10d^(2d)=100 (car 2h=2d)
le 12h 34h 56h 78h 90h 12h 34h indique que les chiffres significatifs sont 1.2 34 56 78 90 12 34
le nombre vaut donc -1.2345678901234*100=-123.45678901234
Remarques1 : si un des chiffres C contient un chiffre héxadécimal strictement supérieur à 9 (ce qu'on ne peut normalement pas optenir en basic), alors le nombre affichera des caractères bizards ; si le premier octé des C vaut 00h, alors le nombre vaut forcément 0 ; si le premier octé des C vaut 0Nh avec N un chiffre héxadécimal inférieur ou égal à 9, alors on optient un nombre normal, sauf que avant l'aplication de la puissance de 10, le chiffre avant la virgule est le 0
Remarque2 : ce mode de stoquage à pour inconvéniant d'énormes pertes de capacitées de stoquage :
-la puissance de 10 pourait aller de -128 à 127 au lieux de -99 à 99
-le nombre de chiffres significatifs pourrait être de 16 voir de 18 si on ne réservait qu'un bit au signe (vu qu'il n'i a que 2 états, ça suffit) et en attribuant le reste aux chiffres significatifs
-on pourrait éalement avoir 16 chiffres significatifs et une puissance de 10 allant de -16384 à 16383
Sandro
PS : quand je met d derière un nombre, c'est pour indiquer qu'il est en base 10, et quand je meth, c'est que c'est en base héxadécimale (16)
sandro- Or 4
- Sexe :
Age : 28
Messages : 806
Date d'inscription : 01/07/2011
Etudes : T°S SVT spé maths
Points Forum : 29
Points Concours : 5
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - ASM TI-83+ / TI-84+
- - Axe Parser
- - TI-82 Stats.fr
- - TI-84+ SE
- - TI-89
- - Casio Collège
Re: format en héxadécimal des nombres réels
Ce sont des floats de 9 octets : lien.
Après pourrait tu nous expliquer les complexes qui font 27 octets ?
Après pourrait tu nous expliquer les complexes qui font 27 octets ?
kindermoumoute- Or 4
- Sexe :
Age : 30
Messages : 797
Date d'inscription : 07/10/2010
Points Forum : 21
Points Concours : 1
Langages :- - TI-Basic Z80
- - Axe Parser
- - TI-83+
Re: format en héxadécimal des nombres réels
ça, ça risque d'être plus compliqué : quand j'enregistre un complexe dans une variable lettre, toutes les lettres disparaissent de la liste des variables du débugueur, donc je ne sais plus où chercher ma variable.
Sandro
PS : c'était surtout pour trouver si pour rand c'est du modulo 10^14 ou autre chose
Sandro
PS : c'était surtout pour trouver si pour rand c'est du modulo 10^14 ou autre chose
sandro- Or 4
- Sexe :
Age : 28
Messages : 806
Date d'inscription : 01/07/2011
Etudes : T°S SVT spé maths
Points Forum : 29
Points Concours : 5
Langages :- - TI-Basic Z80
- - ASM TI-82 Stats / TI-83
- - ASM TI-83+ / TI-84+
- - Axe Parser
- - TI-82 Stats.fr
- - TI-84+ SE
- - TI-89
- - Casio Collège
Sujets similaires
» [FAQ hexadécimal] Posez ici vos questions sur l'hexadécimal 82 stats/83/83+/84+
» hexadecimal...
» Programmer en hexadécimal ?
» Programmer en hexadécimal ... c'est possible !!!
» hexadecimal...
» Programmer en hexadécimal ?
» Programmer en hexadécimal ... c'est possible !!!
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum