"magic numbers" en 32 ou 64 bits ?

Le
Octavio
Bonjour,

s'il vous plaît, pouvez vous me dire si les "magic numbers" suivants
sont codés en 32 ou 64 bits ?


#define MSK_MANT_IBM 0xffffff
#define MSK_EXP_IBM 0x7f000000
#define MSK_SIGN_IBM 0x80000000
#define MSK_NORM_IEEE 0x800000
#define MSK_NO_SIGN 0x7fffffff
#define MSK_MANT_IEEE 0x7fffff
#define MSK_EXP_IEEE 0x7f800000
#define MSK_SIGN_IEEE 0x80000000
#define MSK_NORM 0x1000000


Ils sont utilisés pour faire du bitwise AND avec des variables de type
registre entier pour calcul d'exposant, de mantisse et de signe. Pour
une raison l'application ne calcule pas l'exposant comme souhaité.
L'application roule sur un ordinateur d'architecture x86_64 (64 bits)
sur plateforme Linux SUSE11.1.

Merci.

Octavio
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal J. Bourguignon
Le #23394311
Octavio
Bonjour,

s'il vous plaît, pouvez vous me dire si les "magic numbers" suivants
sont codés en 32 ou 64 bits ?



Compte les bits!

Pourquoi d'après toi s'amuse-t'on à écrire les nombres en base seize en
informatique?

C'est parce que chaque chiffre de la base seize correspond exactement à
quatre bits. Ainsi il y une correspondance directe entre les nombres
écrits en base seize et les nombres binaires:



0xffffff --> 1111 1111 1111 1111 1111 1111 24 bits
0x7f000000 --> 111 1111 0000 0000 0000 0000 0000 0000 31 bits
0x80000000 --> 1000 0000 0000 0000 0000 0000 0000 0000 32 bits
0x7fffffff --> 111 1111 1111 1111 1111 1111 1111 1111 31 bits
0x7fffff --> 111 1111 1111 1111 1111 1111 23 bits
0x7f800000 --> 111 1111 1111 0000 0000 0000 0000 0000 31 bits
0x1000000 --> 1 0000 0000 0000 0000 0000 0000 25 bits


Certains de ces masques semblent correspondre à des nombres IEEE 754 de
32 bits.



Ils sont utilisés pour faire du bitwise AND avec des variables de type
registre entier pour calcul d'exposant, de mantisse et de signe. Pour
une raison l'application ne calcule pas l'exposant comme souhaité.
L'application roule sur un ordinateur d'architecture x86_64 (64 bits)
sur plateforme Linux SUSE11.1.



Une variable de type registre entier, c'est n'importe quoi. Ça dépend
du compilateur (lequel peut se baser sur le processeur cible).


--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Antoine Leca
Le #23394461
Octavio écrivit :
s'il vous plaît, pouvez vous me dire si les "magic numbers" suivants
sont codés en 32 ou 64 bits ?



OEQLC?


#define MSK_MANT_IBM 0xffffff
#define MSK_EXP_IBM 0x7f000000
#define MSK_SIGN_IBM 0x80000000



Les flottants à la sauce IBM peuvent être sur 32 ou 64 bits. Les nombres
magiques sont les mêmes. Et oui, c'est fait pour.


#define MSK_NORM_IEEE 0x800000
#define MSK_NO_SIGN 0x7fffffff
#define MSK_MANT_IEEE 0x7fffff
#define MSK_EXP_IEEE 0x7f800000
#define MSK_SIGN_IEEE 0x80000000



Là, il s'agit de nombres flottants IEEE754 « double », sur 64 bits donc,
tels que vus en 32 bits par une machine ayant le même ordre des bits en
flottant et en entier, pour le mot de poids fort.


#define MSK_NORM 0x1000000



Aucune idée de ce dont il peut s'agir.


Ils sont utilisés pour faire du bitwise AND avec des variables de type
registre entier pour calcul d'exposant, de mantisse et de signe. Pour
une raison l'application ne calcule pas l'exposant comme souhaité.
L'application roule sur un ordinateur d'architecture x86_64 (64 bits)



Là où ta question devient franchement drôle, c'est que cette machine
utilise 32 bits pour les entiers (int). Donc sauf à vouloir se
compliquer la vie au-delà du raisonnable (genre en utilisant des long),
tu ne devrais avoir aucune différence avec un PC x86-32 « normal ».

Maintenant, le fait que tu aies des références à IBM (qui utilise
généralement des machines gros-boutiennes) me laisse flairer un problème
d'ordre plutôt que de nombre...


Antoine
Pascal J. Bourguignon
Le #23394551
Antoine Leca
Octavio écrivit :
s'il vous plaît, pouvez vous me dire si les "magic numbers" suivants
sont codés en 32 ou 64 bits ?



OEQLC?


#define MSK_MANT_IBM 0xffffff
#define MSK_EXP_IBM 0x7f000000
#define MSK_SIGN_IBM 0x80000000



Les flottants à la sauce IBM peuvent être sur 32 ou 64 bits. Les nombres
magiques sont les mêmes. Et oui, c'est fait pour.


#define MSK_NORM_IEEE 0x800000
#define MSK_NO_SIGN 0x7fffffff
#define MSK_MANT_IEEE 0x7fffff
#define MSK_EXP_IEEE 0x7f800000
#define MSK_SIGN_IEEE 0x80000000



Là, il s'agit de nombres flottants IEEE754 « double », sur 64 bits donc,
tels que vus en 32 bits par une machine ayant le même ordre des bits en
flottant et en entier, pour le mot de poids fort.



Non. http://en.wikipedia.org/wiki/IEEE_754-2008
Les IEEE 754 sur 64 bits on un exponent sur 11 bits.
Comme je l'ai indiqué dans ma réponse, 0x7f8000000 n'a que 8 bits à 1,
donc c'est un masque pour des IEEE 754 sur 32 bits.


--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
Samuel DEVULDER
Le #23394671
Le 26/05/2011 19:35, Antoine Leca a écrit :

#define MSK_NORM 0x1000000



Aucune idée de ce dont il peut s'agir.



Un masque pour les nombres dénormalisés?

sam.
Samuel DEVULDER
Le #23394761
Le 26/05/2011 21:25, Samuel DEVULDER a écrit :
Le 26/05/2011 19:35, Antoine Leca a écrit :

#define MSK_NORM 0x1000000



Aucune idée de ce dont il peut s'agir.



Un masque pour les nombres dénormalisés?



Hum.. non, pas ca!


sam.
Publicité
Poster une réponse
Anonyme