constante flottante hexadécimale en C

0x0.3p10 représente quelle valeur?

Et quel est le sens du p dans la déclaration ci-dessus?

0x0.3p10 est un exemple de littéral hexadécimal à virgule flottante, introduit dans C99. Le p sépare le numéro de base de l’exposant.

Le bit 0x0.3 est appelé la partie significande (entier avec fraction optionnelle) et l’exposant est la puissance de deux par laquelle il est mis à l’échelle.

Cette valeur particulière est calculée comme 0.3 en hexadécimal, ou 3 * 16 -1 ( 3/16 ) multipliée par 2 10 ( 1024 ), ce qui donne 3 * 1024 / 16 ou 192 .

Le programme suivant confirme ceci:

 #include  int main (void) { double d = 0x0.3p10; printf ("%.f\n", d); return 0; } 

La section 6.4.4.2 de C99 contient tous les détails:

Une constante flottante a une partie signifiante qui peut être suivie d’une partie exposant et d’un suffixe spécifiant son type. Les composants de la partie significative peuvent comprendre une séquence de chiffres représentant la partie entière, suivie d’un point (.), Suivie d’une séquence de chiffres représentant la partie fraction.

Les composants de la partie exposant sont un e, E, p ou P suivi d’un exposant constitué d’une séquence de chiffres éventuellement signée. Soit la partie entière ou la partie fraction doit être présente; pour les constantes flottantes décimales, la partie période ou exposant doit être présente.

La partie significande est interprétée comme un nombre rationnel (décimal ou hexadécimal); la séquence de chiffres dans la partie exposant est interprétée comme un entier décimal. Pour les constantes flottantes décimales, l’exposant indique la puissance de 10 à laquelle la partie significande doit être mise à l’échelle. Pour les constantes flottantes hexadécimales, l’exposant indique la puissance de 2 par laquelle la partie significande doit être mise à l’échelle.

Pour les constantes flottantes décimales et les constantes flottantes hexadécimales lorsque FLT_RADIX n’est pas une puissance de 2, le résultat est soit la valeur représentable la plus proche, soit la valeur représentable supérieure ou inférieure immédiatement adjacente à la valeur représentable la plus proche choisie manière. Pour les constantes flottantes hexadécimales lorsque FLT_RADIX est une puissance de 2, le résultat est correctement arrondi.