Как получить позицию заполнения длинного двойного значения в С++?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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