5 votes

Définition explicite des valeurs à virgule flottante par base et exposant

Je suis tombé sur http://sourceware.org/ml/glibc-cvs/2013-q1/msg00115.html qui comprend la ligne

#define  TWO5      0x1.0p5      /* 2^5     */

Apparemment, TWO5 est défini comme un double avec la valeur explicite 1<<5 . Cependant, c'est la première fois que je vois cette notation. Depuis combien de temps ce format est-il utilisé, et quel est l'avantage par rapport à l'écriture simple de 2.5 ?

6voto

Lindydancer Points 13353

Cette notation a été introduite en C99. L'avantage est que la valeur est exprimée sous forme hexadécimale, elle n'est donc pas soumise aux arrondis, etc. qui se produisent lorsque vous convertissez une valeur à virgule flottante entre la représentation sous-jacente et une forme décimale.

Il existe de nombreuses pages qui décrivent cette notation, par exemple :

http://www.exploringbinary.com/hexadecimal-floating-point-constants/

3voto

Jens Gustedt Points 40410

Il s'agit de la notation hexadécimale à virgule flottante fournie avec C99 (je pense). L'avantage est qu'elle permet de spécifier de telles constantes avec leur valeur représentable exacte. (enfin cela suppose que la base de la virgule flottante soit 2, 4, 8 ou 16 :)

2voto

nhahtdh Points 28167

Il s'agit de la grammaire de la constante hexadécimale à virgule flottante, telle que définie dans le document C99 draft écrit comme une expression régulière :

0[xX]([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?)[pP][+-]?[0-9]+[flFL]?

Qui se compose de 4 parties :

  • 0[xX] : Préfixe hexadécimal, l'un ou l'autre 2 :

    0x
    0X
  • ([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?) : Constante fractionnaire hexadécimale, par exemple :

    34.2f
    .de
    b3.

    ou une séquence de chiffres hexadécimaux (nombre entier en hexadécimal), par exemple :

    2f4
    10

    La deuxième partie décrit essentiellement la mantisse.

  • [pP][+-]?[0-9]+ : Partie binaire de l'exposant (spécifiée en décimal), par exemple :

    p-4
    p20

    Nous spécifions une constante hexadécimale à virgule flottante en spécifiant la mantisse en hexadécimal, et l'exposant b (pour la base 2) en décimal.

  • [flFL]? : Suffixe flottant facultatif, pour indiquer le type ( float , double o long double ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X