как я могу извлечь мантиссу двойной

Я хотел бы хранить в переменной мантиссу двойного

У меня есть код для получения двоичного представления двойного числа: нажмите здесь

Что я должен изменить, чтобы изолировать мантиссу

12 голосов | спросил Guillaume07 15 AMpFri, 15 Apr 2011 10:04:44 +040004Friday 2011, 10:04:44

3 ответа


0

В <math.h>

double frexp (double value, int *exp)

разложить VALUE на экспоненту и мантиссу.

double ldexp (double value, int exp)

делает наоборот.

Чтобы получить целочисленное значение, вы должны умножить результат frexp на показатель FLT_RADIX DBL_MANT_DIG (они доступны в <float.h>. сохранить это в целочисленной переменной, вам также нужно найти подходящий тип (часто 64-битный тип)

Если вы хотите обработать 128-битную двойную длину, которую предоставляют некоторые реализации, вам понадобится C99 frexpl, чтобы выполнить расщепление, и тогда у вас, вероятно, нет целочисленного типа, достаточного для хранения полного результата.

ответил AProgrammer 15 AMpFri, 15 Apr 2011 11:16:09 +040016Friday 2011, 11:16:09
0

Многие системы Linux имеют /usr/include/ieee754.h который определяет битовые поля для формата IEEE float, double и long double: вы можете тривиально «перенести» его в случае необходимости.

ответил Tony Delroy 15 AMpFri, 15 Apr 2011 11:17:22 +040017Friday 2011, 11:17:22
0

Код здесь немного опасен с точки зрения переносимости, но здесь он есть ...

#include <cstdint>

float myFloat = 100;
int32_t mantissa1 =
    reinterpret_cast<int32_t&>(myFloat) & (((int32_t)1 << 24) - 1);

double myDouble = 100;
int64_t mantissa2 =
    reinterpret_cast<int64_t&>(myDouble) & (((int64_t)1 << 53) - 1);
ответил Mehrdad 15 AMpFri, 15 Apr 2011 10:08:01 +040008Friday 2011, 10:08:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132