В смысле IEEE-754 нет четкого значения для дробной части числа с плавающей запятой вне контекста общего числа. Биты, которые отличают значение 10.5
от значения 10.0
, являются меньшим подмножеством общего представления, чем биты, которые отличают значение 0.0
от значения 0.5
. Когда мы говорим о «фракционной» части цифрового представления IEEE-754, обычно говорят о всех битах мантиссы; для бинарного формата с двойной точностью IEEE 754, который составляет 24 бита, включая один подразумеваемый бит, независимо от величины числа.
UPDATE/ПЕРЕСМОТР:
на основе обновлений, разъясняющие этот вопрос, я заменил большую часть моего предыдущего ответа, в котором рассматриваются проблемы программно извлечения битов float
или double
, в отличие от преобразования десятичный формат текст представление в биты представления формата IEEE-754. Анализ текста - сложная проблема, как я уже сказал в оригинальной версии этого ответа.
Я все же повторяю, что считаю ошибкой разделять мантию на отдельные части.Он не дает особого преимущества, что я вижу, но он представляет проблему правильной рекомбинации частей позже.
Вот реальный подход к общей проблеме:
Определить знак числа входных на основе наличия или отсутствия отрицательного знака.
Формируйте представление бинума абсолютного значения входного номера. Например, представление base-1,000,000,000, хранящееся в массиве uint32_t
. Пока база имеет мощность 10, в этом представлении просто проанализировать введенный номер десятичного формата, и при этом не возникает ошибки округления.
Масштабирования bignum представления соответствующей степень два, чтобы получить уменьшенную величину от 2 и 2 - 1. Это может быть сделано только с целочисленной арифметикой. Обратите внимание, что возможно, вам придется масштабировать до вместо того, чтобы подняться вверх. В любом случае это масштабирование может выполняться только с помощью целочисленной арифметики. Помните, какая сила двух (s
) использовалась как масштабный коэффициент (то есть логарифм базы-2 масштабного коэффициента, не столько сам масштабный коэффициент, это может легко выйти из алгоритма без вычисления необходимых трансцендентных функций) ,
Точность округления до единицы.
Вы затем знаковый бит с шагом 1, биты мантиссы/мантиссы как остальные старшие биты bignum (помните, что наиболее значимым из них является неявной, не явно, в окончательном IEEE формат), а экспонент - 23 - s
.
Обратите внимание, что этот подход может быть продлен очень естественно до научной нотации.
Вопрос не очень ясен. Пожалуйста, покажите некоторые типичные данные, как они получены, и требуемый результат в каждом случае. И код («Я извлек ...») –
На данный момент у меня есть два 32-битных слова памяти, длинные номера типов, один - 1 (из-за знака отрицательный), а другой - 10 в двоичном формате. У меня также есть массив символов с символом «5» как первый и единственный элемент. Это доля предоставленного числа (это может быть «05», «00001257852» и т. Д.). Мне просто нужно преобразовать его в биты. –
... в вопросе, нет как вафли пожалуйста. –