-1

Salut quand réinterprétant une chaîne de 32 bits de bits on pourrait finir par avoir un nombre à virgule flottante valide:Réinterpréter la chaîne de bits d'une plage int non signée [uint (a1) uint (a2)] à une plage de nombres à virgule flottante [float (a1) float (a2)] est-ce possible?

uint: 1101004800, float: 20.000000

disent maintenant je travaille avec un outil d'analyse statique cela définit les opérations sur des plages de valeurs au lieu de valeurs uniques.

Une telle opération que je considère est de réinterpréter la valeur de chaîne binaire de 32 bits d'une valeur non signée dans un flottant.

Est-ce qu'une plage de deux entiers non signés [uint (a1) uint (a2)] lors de la conversion à float [float (a1) float (a2)], encore une plage continue?

Je sais que float a des valeurs spéciales pour NaN, infini. Mais sinon, cette gamme-conversion serait-elle valable?

Les numéros suivants suggéreraient est le cas:

int: 1101004800, float: 20.000000 
int: 1101004801, float: 20.000002 
int: 1101004802, float: 20.000004 
int: 1101004803, float: 20.000006 
int: 1101004804, float: 20.000008 
int: 1101004805, float: 20.000010 
int: 1101004806, float: 20.000011 
int: 1101004807, float: 20.000013 
int: 1101004808, float: 20.000015 
int: 1101004809, float: 20.000017 

J'ai lu here que « la séquence de bits, permet nombres à virgule flottante à comparer et triées correctement même lorsque les interpréter comme des entiers. "

Répondre

1

Il peut fonctionner jusqu'à la représentation fmax mais pas plus loin (float ont une sorte de représentation de la magnitude du signe, donc l'ordre sera inversé pour le négatif).

0000 0000 -> 0.0 
... 
7F7F FFFF -> fmax 
7F80 0000 -> +Inf 
7F80 0001 - 7FFF FFFF -> NaN 
8000 0000 -> -0.0 
... 
FF7F FFFF -> -fmax 
FF80 0000 -> -Inf 
FF80 0001 - FFFF FFFF -> NaN 

Mais quelle est l'intention? Quelle opération allez-vous effectuer sur les plages qui ne peuvent pas être effectuées sur des entiers?