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

Poser une question


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.
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 {}.
OEQLC?
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.
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.
Aucune idée de ce dont il peut s'agir.
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
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 {}.
Un masque pour les nombres dénormalisés?
sam.
Hum.. non, pas ca!