Преобразование числа из десятичной строки в двоичную 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)
person
Mysticial
schedule
15.09.2011