Преобразование числа из десятичной строки в двоичное IEEE довольно просто, если вы знаете, как выполнять сложение и умножение IEEE с плавающей запятой.(или если вы используете какой-либо базовый язык программирования, например C / C ++)
Существует множество различных подходов к этому, но самый простой - это оценить 9.07 * 10^23
напрямую.
Во-первых,начать с 9.07
:
9.07 = 9 + 0 * 10^-1 + 7 * 10^-2
Теперь оцените 10^23
.Это можно сделать, начав с 10 и используя любой алгоритм включения.
Затем умножьте результаты вместе.
Вот простая реализация на C / C ++:
double mantissa = 9;
mantissa += 0 / 10.;
mantissa += 7 / 100.;
double exp = 1;
for (int i = 0; i < 23; i++){
exp *= 10;
}
double result = mantissa * exp;
Теперь вернуться назад (IEEE -> к десятичному) намного сложнее.
Опять же, есть также много разных подходов.Вот самый простой вариант, который я могу себе представить.
Я буду использовать 1.0011101b * 2^40
в качестве примера.(мантисса в двоичном виде)
Сначала преобразуйте мантиссу в десятичную: (это должно быть легко, поскольку показателя нет)
1.0011101b * 2^40 = 1.22656 * 2^40
Теперь "масштабируйте" число так, чтобыдвоичный показатель исчезает.Это делается путем умножения на соответствующую степень 10, чтобы «избавиться» от двоичного показателя.
1.22656 * 2^40 = 1.22656 * (2^40 * 10^-12) * 10^12
= 1.22656 * (1.09951) * 10^12
= 1.34861 * 10^12
Таким образом, ответ:
1.0011101b * 2^40 = 1.34861 * 10^12
В этом примере 10^12
было необходимо, чтобы «уменьшить масштаб» 2^40
.Определение необходимой мощности 10 просто равно:
power of 10 = (power of 2) * log(2)/log(10)