Convertisseur de nombres IEEE 754

Convertissez un nombre décimal en représentation hexadécimale IEEE 754 sur 32 ou 64 bits, ou retrouvez sa valeur à partir des bits, avec les registres Modbus dans quatre agencements affichés.

Vous avez un nombre à transmettre ? Convertissez-le ici. Pour décoder les registres renvoyés par un appareil, utilisez le décodeur de registres Modbus.

Modbus et liaisons série Mis à jour Gratuit, sans inscription

Flottant sur 32 bits

2,3777e-41décimal
0000 4248valeur stockée, simple précision sur 32 bits
00000000

A 00

00000000

B 00

01000010

C 42

01001000

D 48

  • Signe, 1 bit
  • Exposant, 8 bits
  • Fraction, 23 bits

+0.f =0,0020227432251×2−126=2,3777232342663496e−41

signe
0, positif
exposant
0 − 127 = -126
fraction
0x4248

L’écart avec le flottant suivant sur 32 bits est ici de 1,401 × 10⁻⁴⁵.

Quelle conversion souhaitez-vous effectuer ?
Conversion
Précision
Valeur

Par exemple 230.5, -12 ou 1.5e-3

Huit chiffres sur 32 bits, seize sur 64 bits ; espaces acceptés

Valeur décimale

2,3777e-41

simple précision sur 32 bits.

Hexadécimal
0000 4248
Bit de signe
0 (positif)
Exposant
0 − 127 = −126
Fraction, 23 bits
0x4248
Classe
Nombre sous-normal
Registres Modbus, ABCD (octets de poids fort d’abord)
0000 4248
Registres Modbus, CDAB (mots inversés)
4248 0000
Registres Modbus, BADC (octets inversés)
0000 4842
Registres Modbus, DCBA (mots et octets inversés)
4842 0000
Méthode de calcul
  1. x = (−1)^s × 0.f × 2^(-126)=(−1)⁰ × 0,0020227432251 × 2⁻¹²⁶=2,3777232342663496e-41

0x00004248, interprété en IEEE 754 simple précision sur 32 bits, vaut 2,3777e-41.

Conseil : Une valeur plausible dans un ordre de mots est un indice, pas une preuve. Confirmez l’ordre des octets et des mots avec la table des registres de l’appareil ou un essai contrôlé sur une valeur connue. Les registres 4120 0000 valent 10 en ordre ABCD, mais environ 2,3e-41 en ordre CDAB.

Convertir un flottant en hexadécimal et inversement

Un nombre flottant IEEE 754 en simple précision occupe 32 bits : 1 bit de signe, 8 bits d’exposant et 23 bits de fraction. 230,5 s’écrit 0x43668000. Compteurs d’énergie, analyseurs de puissance et automates utilisent ce format pour des mesures comme la tension, la puissance ou la fréquence, puis les transmettent sur Modbus dans deux registres de 16 bits.

Les registres renvoyés par un appareil contiennent les bits bruts. Les lire comme des entiers donne une valeur aberrante ; il faut décoder ces bits comme un flottant dans le bon ordre de mots.

Valeur d’un flottant stocké

x = (−1)s × 1.f × 2e − 127

s est le bit de signe, e le champ d’exposant sur 8 bits et f les 23 bits de fraction interprétés comme fraction binaire. Le 1 initial est implicite : il n’est pas stocké. En double précision sur 64 bits, l’exposant occupe 11 bits avec un biais de 1023, et la fraction 52 bits.

Du décimal vers l’hexadécimal

Pour une valeur normale, trouver s, e et f pour que (−1)s × 1.f × 2e − 127 soit le plus proche de x

La plupart des décimaux n’ont pas de représentation binaire exacte : le flottant stocke la valeur la plus proche. 0,1 devient 0,100000001490116, codé 0x3DCCCCCD. Le calculateur montre la valeur réellement stockée et l’erreur d’arrondi.

Valeurs spéciales

e = 0 : zéro ou sous-normal ; e = 255 : infini ou NaN

Un champ d’exposant entièrement nul code zéro ou les nombres sous-normaux inférieurs à 1,18 × 10−38. Un champ entièrement à un code l’infini si la fraction est nulle, sinon NaN (« non numérique »). De nombreux compteurs renvoient NaN, souvent 0x7FC00000, lorsqu’une mesure n’est pas disponible.

Modbus ne définit que des registres de 16 bits, transmis octet de poids fort d’abord : un flottant sur 32 bits en occupe donc deux. La norme ne précise pas quel registre vient en premier. Nombre d’appareils envoient le mot de poids fort d’abord (ABCD), d’autres le mot de poids faible d’abord (CDAB) ; quelques-uns inversent aussi les octets dans chaque registre (BADC, DCBA). Confirmez l’ordre avec la table des registres de l’appareil ou un essai contrôlé sur une valeur connue. Une mesure seulement plausible ne suffit pas à l’établir.

Exemples de nombres flottants IEEE 754

Une fréquence de 50 Hz

50 = 1,5625 × 25 : le bit de signe vaut 0, le champ d’exposant vaut 5 + 127 = 132 et la fraction représente 0,5625. Le résultat est 0x42480000, transmis sur Modbus dans les registres 4248 0000 en ordre ABCD.

simple précision sur 32 bits en hexadécimal 0x42480000 Ouvrir dans le calculateur

Les mêmes registres dans le mauvais ordre

Si un compteur envoie le mot de poids faible d’abord et que le logiciel lit le mot de poids fort d’abord, 50 Hz arrive sous la forme 0000 4248. Interprétée en ordre ABCD, cette séquence vaut 2,3777e‑41 : un nombre sous-normal proche de zéro. Une valeur minuscule, énorme ou NaN là où une mesure normale est attendue peut signaler un mauvais ordre des mots.

Valeur décimale 2,3777e-41 Ouvrir dans le calculateur

Pourquoi 0,1 n’est pas exactement 0,1

En binaire, 0,1 se répète indéfiniment, comme 1/3 en décimal. Le flottant sur 32 bits le plus proche vaut 0,100000001490116, codé 0x3DCCCCCD. L’erreur est d’environ 1,5 × 10−9, bien inférieure à la précision d’un compteur, mais elle explique pourquoi comparer un flottant à 0,1 par égalité exacte peut échouer.

simple précision sur 32 bits en hexadécimal 0x3DCCCCCD Ouvrir dans le calculateur

Valeurs courantes : flottant et hexadécimal

Motifs binaires IEEE 754 que l’on rencontre dans les registres de compteurs, en ordre ABCD.

Décimal32 bits64 bits
00x000000000x0000000000000000
10x3F8000000x3FF0000000000000
−10xBF8000000xBFF0000000000000
0.50x3F0000000x3FE0000000000000
0.10x3DCCCCCD0x3FB999999999999A
20x400000000x4000000000000000
100x412000000x4024000000000000
500x424800000x4049000000000000
600x427000000x404E000000000000
1000x42C800000x4059000000000000
2300x436600000x406CC00000000000
4000x43C800000x4079000000000000
10000x447A00000x408F400000000000
3.141590x40490FD00x400921F9F01B866E

Télécharger ce tableau (CSV)

Questions sur Nombres flottants IEEE 754

Combien de chiffres significatifs contient un flottant sur 32 bits ?

Environ sept chiffres décimaux significatifs. Au-delà de 16 777 216 (224), tous les entiers ne sont plus représentables. Pour un compteur d’énergie, un total en kWh stocké sur 32 bits ne peut donc plus avancer par unités après environ 16,8 millions. Les compteurs de grands totaux utilisent pour cette raison des flottants sur 64 bits ou des entiers.

Que signifient ABCD, CDAB, BADC et DCBA ?

Ce sont quatre agencements d’octets courants pour une valeur sur 32 bits répartie dans deux registres. A est l’octet de poids le plus fort. ABCD transmet d’abord le registre de poids fort avec les octets de poids fort d’abord, comme Modbus le fait dans chaque registre. CDAB inverse les deux registres ; BADC inverse les octets dans chacun ; DCBA fait les deux. Vérifiez l’agencement réel dans la table de registres de l’appareil.

Les chiffres hexadécimaux correspondent-ils à ce que transmet le compteur ?

En ordre ABCD, oui : les quatre octets hexadécimaux apparaissent dans cet ordre sur le fil. Pour les autres ordres, utilisez les mots de registre indiqués par le calculateur. Le décodeur de registres Modbus part des registres et affiche tous les ordres.

Pourquoi un compteur renvoie-t-il NaN ?

NaN désigne une valeur IEEE non numérique, et non zéro. Un compteur peut l’utiliser pour une mesure indisponible, le produire après un calcul invalide ou sembler l’afficher si les registres sont décodés dans le mauvais ordre. Consultez la table de registres et l’état de l’appareil pour établir la cause. Ne l’enregistrez pas comme zéro.

Limites de ce résultat

  • Modbus ne définit que des registres de 16 bits. L’agencement d’un flottant dans les registres dépend de la table du fabricant, pas du protocole. Les quatre agencements affichés ne couvrent pas toutes les possibilités, surtout pour les valeurs sur 64 bits.
  • NaN admet plusieurs motifs binaires ; cet outil affiche le motif saisi ou la valeur par défaut de la plateforme.
  • Une entrée décimale est d’abord lue comme un nombre sur 64 bits ; les chiffres au-delà d’environ 17 chiffres significatifs sont donc ignorés.

Mesurer en continu

Edge lit les compteurs Modbus sur TCP et RTU et décode chaque registre selon le type et l’ordre des mots définis dans son modèle d’appareil. Un ZMB relie sans fil un compteur RS-485 au Gateway.

Guides associés

Sources

  1. IEEE Standard for Floating-Point Arithmetic (IEEE 754-2019) (s’ouvre dans un nouvel onglet) IEEE, 2019-07-22
  2. MODBUS Application Protocol Specification (s’ouvre dans un nouvel onglet) (PDF) Modbus Organization, V1.1b3, 2012-04-26