OVH Cloud OVH Cloud

réels

15 réponses
Avatar
Barbarossat
Je recherche à convertir en nombre réel à partir de données sur 32 bits par
une formule de calcul ou autre solution simple (en basic)
merci

10 réponses

1 2
Avatar
Patrick D.
On Fri, 15 Oct 2004 00:28:10 +0200, Barbarossat
wrote:

Je recherche à convertir en nombre réel à partir de données sur 32 bits
par
une formule de calcul ou autre solution simple (en basic)
merci





tu peux être un peu plus clair ?
que représentent tes données en 32 bits ? binaire, hexa, caractères ?

--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Avatar
Barbarossat
A l'origine en binaire sur 32 bits, je voudrai en extraire le réel avec son
signe et sa virgule
Merci
"Patrick D." <patrickr.dubois.don' a écrit dans le message de
news:
On Fri, 15 Oct 2004 00:28:10 +0200, Barbarossat
wrote:

Je recherche à convertir en nombre réel à partir de données sur 32 bits
par
une formule de calcul ou autre solution simple (en basic)
merci





tu peux être un peu plus clair ?
que représentent tes données en 32 bits ? binaire, hexa, caractères ?

--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *


Avatar
Vincent Burel
"Barbarossat" wrote in message
news:41704444$0$28817$
A l'origine en binaire sur 32 bits, je voudrai en extraire le réel avec


son
signe et sa virgule
Merci
"Patrick D." <patrickr.dubois.don' a écrit dans le message


de
news:
> On Fri, 15 Oct 2004 00:28:10 +0200, Barbarossat



> wrote:
>
>> Je recherche à convertir en nombre réel à partir de données sur 32 bits
>> par
>> une formule de calcul ou autre solution simple (en basic)
>> merci



donc vous avez un float32 et vous voulez savoir son signe (bit 31) et sa
virgule !? ca veut dire quoi ca virgule !?
Avatar
Barbarossat
Excuse moi je n'ai pas été très clair :
J'ai un nombre Hexa ou binaire sur 32 bits : 41BD 851E
je voudrai connaitre la formule qui me permet de connaitre sa valeur en
décimal qui est de 23.69
tel 23.69 = (formule ( 41BD 851E ))
Suis-je plus clair ?
Merci

"Vincent Burel" a écrit dans le message de
news: 4170c31a$0$8681$

"Barbarossat" wrote in message
news:41704444$0$28817$
A l'origine en binaire sur 32 bits, je voudrai en extraire le réel avec


son
signe et sa virgule
Merci
"Patrick D." <patrickr.dubois.don' a écrit dans le message


de
news:
> On Fri, 15 Oct 2004 00:28:10 +0200, Barbarossat



> wrote:
>
>> Je recherche à convertir en nombre réel à partir de données sur 32
>> bits
>> par
>> une formule de calcul ou autre solution simple (en basic)
>> merci



donc vous avez un float32 et vous voulez savoir son signe (bit 31) et sa
virgule !? ca veut dire quoi ca virgule !?




Avatar
Vincent Burel
"Barbarossat" wrote in message
news:4170d223$0$27865$
Excuse moi je n'ai pas été très clair :
J'ai un nombre Hexa ou binaire sur 32 bits : 41BD 851E
je voudrai connaitre la formule qui me permet de connaitre sa valeur en
décimal qui est de 23.69
tel 23.69 = (formule ( 41BD 851E ))
Suis-je plus clair ?
Merci



ha ok... Alors il faut que vous potassiez le format float32, que vous
trouverez dans les doc Intel par exemple, si vous faites une petite
recherche sur le net, vous trouverez des sites qui vous donne des solutions
:
http://sandbox.mc.edu/~bennet/cs110/flt/ftod.html

Côté exemple de code, vous trouverez aussi ca dans des sources qui font de
l'interprétation float32... par exemple dans les source du
compilateur/decompilateur asm "nasm", peut-être aussi dans les unité "C" qui
font la conversion en string.

VB
Avatar
Pierre Maurette
"Vincent Burel" a écrit:


"Barbarossat" wrote in message
news:4170d223$0$27865$
Excuse moi je n'ai pas été très clair :
J'ai un nombre Hexa ou binaire sur 32 bits : 41BD 851E
je voudrai connaitre la formule qui me permet de connaitre sa valeur en
décimal qui est de 23.69
tel 23.69 = (formule ( 41BD 851E ))
Suis-je plus clair ?
Merci



ha ok... Alors il faut que vous potassiez le format float32,


IEEE 754 ?
que vous
trouverez dans les doc Intel par exemple, si vous faites une petite
recherche sur le net, vous trouverez des sites qui vous donne des solutions
:
http://sandbox.mc.edu/~bennet/cs110/flt/ftod.html

Côté exemple de code, vous trouverez aussi ca dans des sources qui font de
l'interprétation float32... par exemple dans les source du
compilateur/decompilateur asm "nasm", peut-être aussi dans les unité "C" qui
font la conversion en string.


Quoi qu'en C, sprintf() le fait directement. C'est d'ailleurs
peut-être le cas du basic en question.
--
Pierre
Avatar
Barbarossat
Merci de vos réponse.
Le Hic c'est que je ne suis pas dans un language avec instructions pour
faire cette conversion, je suis sur une entrée d'un automate programmable et
je n'ai pas beaucoup de possibilité au niveau instructions.
Par contre je peux faire faire une équation, d'oou ma question
Merci


"Vincent Burel" a écrit dans le message de
news: 4170e15b$0$7182$

"Barbarossat" wrote in message
news:4170d223$0$27865$
Excuse moi je n'ai pas été très clair :
J'ai un nombre Hexa ou binaire sur 32 bits : 41BD 851E
je voudrai connaitre la formule qui me permet de connaitre sa valeur en
décimal qui est de 23.69
tel 23.69 = (formule ( 41BD 851E ))
Suis-je plus clair ?
Merci



ha ok... Alors il faut que vous potassiez le format float32, que vous
trouverez dans les doc Intel par exemple, si vous faites une petite
recherche sur le net, vous trouverez des sites qui vous donne des
solutions
:
http://sandbox.mc.edu/~bennet/cs110/flt/ftod.html

Côté exemple de code, vous trouverez aussi ca dans des sources qui font de
l'interprétation float32... par exemple dans les source du
compilateur/decompilateur asm "nasm", peut-être aussi dans les unité "C"
qui
font la conversion en string.

VB









Avatar
AMcD®
Barbarossat wrote:
Merci de vos réponse.
Le Hic c'est que je ne suis pas dans un language avec instructions
pour faire cette conversion, je suis sur une entrée d'un automate
programmable et je n'ai pas beaucoup de possibilité au niveau
instructions. Par contre je peux faire faire une équation, d'oou ma
question
Merci



Le hic, c'est que tu me semble un peu feignasse, en cherchant un peu dans
les doc spécifiées par les divers intervenants, tu trouves vite fait de quoi
démarrer hein..

Enfin bon, ayant quelques minutes, expliquons un peu (ça fait classe je
trouve de parler de soi à la 3e personne).

Alors, supposons que nous soyons dans le cas de réels suivant la norme
IEEE754, ce qui est par exemple le cas des processeurs Intel.

Ton réel se décompose en 3 parties :

signe - exposant - significande (mantisse je crois en français).

Prenons un exemple : le réel 196,625 (cent quatre-vingt seize virgule six
cent vingt cinq).

Le signe
=====
Le signe est codé sur 1 bit. 0 le nombre est positif, 1 il ne l'est pas
(négatif donc, tu suis, c'est bien). Donc, nous aurons 0 pour notre bit de
signe.

L'exposant
=======
196,625 tu peux le séparer en deux, sa partie entière et sa partie
fractionnaire.

Sa partie entière, 196, tu l'écris 11000100 en binaire, chaque bit
représentant une puissance de 2 élevée à la puissance de son rang dan le
nombre.

Pour la partie fractionnaire, c'est pareil, sauf que tu codes en fonction
des puissance négatives, 2 ^ -1, 2 ^ -2, etc.

0,625 = 1 x 0,500 + 0 x 0,250 + 1 x 0,125. soit 1 x 2^ -1 + 0 x 2^ -2 + 1 x
2^ -3.

Tu peux donc écrire ton nombre 1100 0100,101. Loue ma patience et mon soucis
du détail au passage.

Pour gagner de la place, on normalise les nombres, c'est à dire que 127 sera
écrit 1,27 x 10^2, 1250 = 1,250 x 10^3, etc. Si tu exceptes 0, t'auras
toujours des nombres de la forme 1.zzzzzz. Raisonne en base 2 et tu verras
que t'auras toujours un bit à 1 quelque part (sauf pour zéro bien sûr).

Par exemple notre 1100 0100,101 là, il nous faut le décaler de 7 bits vers
la gauche pour le normaliser, soit :

1,100 0100 101 x 2^7. Le 7 de l'exposant, puisque nous sommes en binaire,
signifie qu'il faut se déplacer (multiplier) de 7 bits vers la gauche pour
avoir le nombre correct.

Si tu t'es pas encore suicidé, il te reste à savoir que pour les réels
simple précision (32 bits), on utilise 8 bits pour l'exposant et 23 pour le
significande (1+8+232). Pour les double précision, 1-11-52 (64 bits). Etc.

Afin d'avoir un exposant toujours positif, on le biaise par une valeur. Si
tu veux, pour simplifier, on ajoute une constante, 127 en 32 bits, 1023 en
64 bits, etc. Pourquoi on veut l'exposant positif, hé, fouille dans tes
cours d'archi hein :-).

Donc, notre exposant 7, qui vaut 111 en binaire, sera biaisé ainsi : 7 + 127
= 134, soit 1000 0110.

Le significande
==========
Puisque nous sommes en normalisé, donc, notre nombre sera toujours sous la
forme 1.xxxxx, on peut laisser tomber le 1, on gagne 1 bit de codage et donc
en précision ou étendue, comme tu veux.

Notre significande est sur 23 bits :

1100 0100 101 -> 1000 1001 0100 0000 0000 000 (n'oublie pas qu'on a laissé
tomber le 1 initial).

Final
===
Au final, notre 196,625 est codé ainsi (s-e-m)

0 10000110 10001001010000000000000

Je te le prouve (non, c'est vrai quoi, j'ai une image de marque de qualité,
j'y tiens) ! Voici un code de C ultra-trop-mega comme les aimaient mes profs
dans le temps où j'étais étudiant :

float hiyaaa = 196,625;
long zboing = 0;

_asm
{
fld hiyaaa
fstp zboing
}

que crois-tu qu'il y a dans zboing ? 0x4344A000h

soit 0 10000110 10001001010000000000000 en binaire.

C'est beau hein ? Oui, je sais, toi il te faut faire le chemin inverse
hexa -> réel et pas réel -> hexa. Je m'en rends-compte maintenant :-). Mais
bon, si t'as bien suivi, c'est pas sorcier...

Évidemment, il te reste à bosser les NaNs, les nombres indéfinis, les
infinis signés, etc. Bref, il te faut fouiller les volumes 1 et 3 d'Intel.

Bon courage.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Barbarossat
OK, explication clair et rapide.
Mais cela ne résout pas mon problème :
- comment donc trouver le réel sans fonction spéciale en une équation ?

merci
Avatar
AMcD®
Barbarossat wrote:
OK, explication clair et rapide.
Mais cela ne résout pas mon problème :
- comment donc trouver le réel sans fonction spéciale en une équation
?



Dis, t'es stupide où tu le fais exprès ? Refais le procédé que je t'explique
en sens inverse ! Tu veux pas que je t'écrive le code aussi par hasard tant
qu'on y est ? Pas possible, t'es encore une feignasse d'étudiant qui veut se
faire faire son TD/TP de Fac/IUT ou quoi ?

Non mais, sans rire...

--
AMcD®

http://arnold.mcdonald.free.fr/
1 2