C++ обеспечение размера float 4 байта
мне нужен способ кросс-архитектуры, чтобы гарантировать, что float будет 4 байта (как в 32-битных окнах). Например, в структурах, которые я создаю, я использую __int32
вместо int
чтобы обеспечить целое число, 4 байта.
как я мог сделать это с поплавком? Я знаю, что могу просто заменить значение на __int32
type; однако, при приведении к float в 64-битных системах у меня не будет проблем?
2 ответов
мне нужен способ кросс-архитектуры, чтобы гарантировать, что float будет 4 байта
нет аналога int32_t
для значений с плавающей точкой.
единственный кросс-платформенный способ достичь того, что вы хотите, - это протестировать его с помощью среды выполнения или статических утверждений.
#include <cassert>
int main () {
assert(sizeof(float) == 4);
// If control reaches this line, then you've
// ensured that float is 4 bytes.
// rest of your program goes here
}
нет стандартного совместимого способа сделать это, потому что размер данных с плавающей запятой привязан к процессору. The IEEE-754
standard (который, насколько мне известно, используют все процессоры с плавающей запятой) определяет значение с плавающей запятой с одной точностью как 4 байта.
причина, по которой нет стандартного упоминания, заключается в том, что авторы C не хотят привязывать себя к конкретной реализации с плавающей запятой, в случае, если стандарт изменяется или обновляется. А также потому, что CPU определяет размеры и реализацию одиночных и двойных прецизионных поплавков в любом случае, поэтому это не то, что касается компилятора.
Если вы беспокоитесь об этом, вы можете использовать static_assert
обеспечить sizeof(float) == 4
; тем не менее, это не проблема, с которой вы столкнетесь, я не представляю. И если это так, вы должны иметь дело с ним на индивидуальной основе (что действительно будет основой архитектуры по архитектуре.)