99 votes

Types à virgule flottante de taille fixe

Dans les en-têtes stdint.h (C99), boost / cstdint.hpp et cstdint (C ++0x), il existe, entre autres, le type int32_t.

Existe-t-il des types de virgule flottante de taille fixe similaires? Quelque chose comme float32_t?

48voto

Stephen Canon Points 58003

Rien de tel n'existe dans le C ou C++ normes à l'heure actuelle. En fait, il n'est même pas une garantie que l' float sera un binaire à virgule flottante de format.

Certains compilateurs garantir que l' float type sera la norme IEEE-754 32 bits format binaire. Certains ne le font pas. En réalité, float est en fait la norme IEEE-754 single type sur la plupart des non-incorporé des plates-formes, bien que les mises en garde habituelles sur certains compilateurs de l'évaluation des expressions dans un plus grand format de s'appliquer.

Il y a un groupe de travail chargé de discuter de l'ajout de liaisons de langage C pour la version 2008 de la norme IEEE-754, qui pourrait envisager de recommander une telle typedef être ajouté. Si on ajoute à cela à C, je m'attends à la norme C++ suivraient... éventuellement.

33voto

Potatoswatter Points 70305

Si vous voulez savoir si votre float est la norme IEEE de 32 bits type, vérifiez std::numeric_limits<float>::is_iec559. C'est une constante de compilation, pas une fonction.

Si vous voulez être plus à l'épreuve des balles, vérifiez également std::numeric_limits<float>::digits pour s'assurer qu'ils ne sont pas sournoisement à l'aide de la norme IEEE double précision pour l' float. Il devrait être de 24.

Quand il s'agit de long double, il est plus important de vérifier l' digits parce qu'il y a un couple IEEE formats dont il peut être raisonnablement: 128 bits (chiffres = 113) ou de 80 bits (chiffres = 64).

Il ne serait pas pratique d' float32_t en tant que tel parce que vous voulez généralement à l'utilisation de la virgule flottante, si disponible, et de ne pas retomber sur un logiciel de mise en œuvre.

20voto

EmbeddedCoder Points 31

Si vous pensez avoir typedefs comme float32_t et float64_t il est impossible pour une raison quelconque, vous devez être trop habitué à votre familier OS, compilateur, que vous ne parvenez pas trop regarder à l'extérieur de votre petit nid.

Il existe du matériel qui s'exécute en mode natif 32 bits à virgule flottante IEEE opérations et d'autres qui ne 64-bit. Parfois, de tels systèmes ont même de parler à tour de rôle, dans lequel cas, il est extrêmement important de savoir si un double est 32 bits ou 64 bits sur chaque plate-forme. Si la plate-forme 32 bits ont été à faire excessives sur les calculs de base sur les valeurs de 64 bits à partir de l'autre, nous pouvons avoir envie de jeter à la moindre précision selon calendrier et les exigences en matière de vitesse.

J'ai personnellement mal à l'aise à l'aide de chars et de doubles, sauf que je sais exactement combien de morceaux ils sont sur mon platfrom. Encore plus si je suis pour le transfert de ces à une autre plate-forme au-dessus de certains canaux de communication.

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