Я не признаю ваши выходные выборки в кодировках чисел с плавающей точкой или других общих представлений .1 и .058. Я подозреваю, что эти числа - это адреса, где ассемблер или компилятор сохранил кодировку с плавающей запятой.
Другими словами, вы написали текст, включающий в себя литерал с плавающей запятой, а ассемблер или компилятор преобразовали этот литерал в кодировку с плавающей запятой, сохранили его на каком-то адресе и затем поместили адрес в инструкцию, которая загружает кодировку с плавающей запятой из памяти.
Эта гипотеза согласуется с тем, что эти два номера отличаются на восемь. Поскольку с плавающей запятой с двойной точностью обычно восемь байтов, второй адрес (0x415748) составлял восемь байтов за первый адрес (0x415740).
Способ для кодирования числа с плавающей точкой примерно так:
Пусть й число, подлежащие кодированию.
Установите s (бит знака) на 0, если x положителен и 1, если x отрицательный. Установите x в абсолютное значение x.
Set е (экспонент) 0. Повторите какие из перечисленных ниже обстоятельств:
- Если х 2 или больше, добавьте 1 е и разбивают й на 2. Повторять до тех пор, пока х меньше 2.
- Если х меньше 1, добавить -1 е и умножить х на 2. Повторять до тех пор, пока х, по крайней мере 1.
Когда вы закончите с вышеизложенным, х, по крайней мере 1 и меньше 2. Кроме того, исходное число равно (-1) s · 2 e · x. То есть мы представили число со знаковым битом (s) и показателем двух (e), а значимое (x), которое находится в [1, 2) (включает 1, исключает 2).
Комплект f = (x-1) · 2 . Раунд f до ближайшего целого (если это связь между двумя целыми числами, округленная до четного целого). Если f теперь 2 , установите f в 0 и добавьте 1 в e. (Этот шаг находит 52 бита x, которые сразу после «десятичной точки», когда x представляется в виде двоичной цифры, округление после цифры 52 и, и она корректирует экспоненту, если округление в этом положении округляет x вверх до 2, который находится за пределами интервала, где мы этого хотим.)
Добавить 1023 to e. Это не имеет большого значения в отношении x; это просто часть кодирования с плавающей запятой. При декодировании 1023 вычитается.
Теперь преобразуйте s, e и f в двоичные цифры, используя ровно одну цифру для s, 11 цифр для e и 52 цифры для f. Если необходимо, включая начальные нули, так что e представлено ровно 11 двоичными цифрами, а f представлено ровно 52 двоичными цифрами. Объедините эти цифры, и у вас есть 64 бит. Это обычная кодировка IEEE 754 для числа с плавающей запятой с двойной точностью.
Есть некоторые особые случаи: Если исходное число равно нулю, используйте ноль для s, e и f. (s также может быть 1, чтобы представлять специальный «отрицательный ноль» .Если, перед добавлением 1023, e меньше -1022, тогда необходимо внести некоторые корректировки, чтобы получить «денормальный» результат или ноль, что я не далее, на данный момент.Если перед добавлением 1023 e больше 1023, тогда величина числа слишком велика, чтобы быть представлена в плавающей точке. Вместо этого она может быть закодирована как бесконечность, установив e (после добавления 1023) до 2047 и f к нулю.
http://www.wikihow.com/Convert-from-Decimal-to-Binary –
_I не хочу, чтобы он был на каком-то языке, мне он нужен в основном в математике. Checkout: http://math.stackexchange.com/ – Anne
Mr D - Я имел в виду числа с запятой (например, 5,21651526) – user35443