В stdint.h
(C99), boost/cstdint.hpp, и cstdint
(C++ 0x), заголовки там, среди других, типа int32_t
.
Есть ли подобные типы плавающей точки фиксированного размера? Что-то как float32_t
?
Ничего подобного в настоящее время не существует в стандартах C или C ++. Фактически, нет даже гарантии, что float
вообще будет двоичным форматом с плавающей запятой.
Некоторые компиляторы гарантируют, что тип float
будет 32-битным двоичным форматом IEEE-754. Некоторые этого не делают. На самом деле float
на самом деле является типом IEEE-754 single
на большинстве невстроенных платформ, хотя обычные предостережения насчет того, что некоторые компиляторы оценивают выражения в более широком смысле. формат применяется.
Существует рабочая группа, обсуждающая добавление привязок к языку C для версии IEEE-754 2008 г., которая могла бы рекомендовать добавить такой typedef. Если бы это было добавлено в C, я ожидаю, что стандарт C ++ последует этому примеру ... в конце концов.
Если вы хотите узнать, является ли ваш float
32-битным типом IEEE, проверьте std :: numeric_limits
. Это константа времени компиляции, а не функция.
Если вы хотите быть более надежным, также проверьте std :: numeric_limits
, чтобы убедиться, что они не скрытно используют стандарт двойной точности IEEE для float
. Это должно быть 24.
Когда дело доходит до long double
, более важно проверять цифр
, потому что есть пара форматов IEEE, которые могут быть разумными: 128 бит (цифры = 113) или 80 бит (цифры = 64).
Было бы непрактично иметь float32_t
как таковой, потому что вы обычно хотите использовать оборудование с плавающей запятой, если оно доступно, и не прибегать к программной реализации.