Код: Выделить всё
template
constexpr uint32_t bitsInExponent()
{
static_assert(std::numeric_limits::is_iec559);
return std::ceil(std::log2(std::numeric_limits::max_exponent-std::numeric_limits::min_exponent+1));
}
// outputs 15 for long double on my machine/compiler
template
constexpr uint32_t bitsInMantissa()
{
static_assert(std::numeric_limits::is_iec559);
static_assert(std::numeric_limits::radix == 2);
return std::numeric_limits::digits-1;
}
// outputs 63 for long double on my machine/compiler
template
constexpr uint32_t bitsInSign()
{
return 1;
}
Однако объем памяти, занимаемый длинным двойным значением (
Код: Выделить всё
sizeof(long double)Заполнение значения с плавающей запятой (те 128-79, 49 бит), кажется, находится в старших битах на моей машине с моим компилятором и в основном заполнено мусором.
Мой вопрос: Всегда ли эти 1-63 бита находятся в старших битах 128 биты?
В случае, если заполнение расширенного двоичного формата IEEE-754 двоичного 64 не гарантированно будет в старших битах, как определить, где находится заполнение?
Попробуйте:
https://onlinegdb.com/doL6E7WYL
Подробнее здесь: https://stackoverflow.com/questions/724 ... value-in-c
Мобильная версия