Как получить позицию заполнения длинного двойного значения в С++?C++

Программы на C++. Форум разработчиков
Anonymous
Как получить позицию заполнения длинного двойного значения в С++?

Сообщение Anonymous »

Количество битов мантиссы, экспоненты и знака длинного двойного значения можно определить следующим способом (предполагая, что iec559):

Код: Выделить всё

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;
}
Следовательно, общее количество бит для длинного двойного значения составляет (на моей машине и компиляторе) 79 (63+15+1), вероятно, это расширенный формат IEEE-754binary64.
Однако объем памяти, занимаемый длинным двойным значением (

Код: Выделить всё

sizeof(long double)
) равно 16, то есть 128 бит.
Заполнение значения с плавающей запятой (те 128-79, 49 бит), кажется, находится в старших битах на моей машине с моим компилятором и в основном заполнено мусором.
Мой вопрос: Всегда ли эти 1-63 бита находятся в старших битах 128 биты?
В случае, если заполнение расширенного двоичного формата IEEE-754 двоичного 64 не гарантированно будет в старших битах, как определить, где находится заполнение?
Попробуйте:
https://onlinegdb.com/doL6E7WYL

Подробнее здесь: https://stackoverflow.com/questions/724 ... value-in-c

Вернуться в «C++»