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; тем не менее, это не проблема, с которой вы столкнетесь, я не представляю. И если это так, вы должны иметь дело с ним на индивидуальной основе (что действительно будет основой архитектуры по архитектуре.)