Главная /
Ассемблер /
Для чайников /
Введение /
Представление данных /
Вещественные числа /
Первая попытка
Как вы понимаете, количество знаков после запятой может быть бесконечно большим.
Но память компьютера не бесконечна. Поэтому любое вещественное число будет помещено
в память компьютера с какой-то погрешностью. Например, у нас есть число 3,14159265359 (Пи).
Как нам поместить его в слово данных? Нужно ведь перевести все цифры в двоичное значение,
да ещё как-то определить знак числа и местоположение точки (запятой).
Допустим, что старший байт мы выделим для целой части числа, а младший – для дробной.
Старший бит старшего байта будет определять знак числа. Тогда, преобразовав целую и
дробную части в двоичное представление, получим:
Число |
Десятичное |
Двоичное |
Целая часть |
3 |
11 |
Дробная часть |
14159265359 |
1101001011111101010011111001001111 |
Понятно, что данное число не поместится в слове данных полностью, поэтому
его придётся обрезать (округлить). Но простым обрезанием дробной части мы не обойдёмся,
так как получится большая погрешность. Например, если мы просто обрежем «лишние»
биты справа, то получим:
Знак |
Целая часть |
Дробная часть |
0 |
0000011 |
11010010 |
То есть если число в двоичном коде 11,11010010 преобразовать в десятичное,
просто поочерёдно преобразуя целую и дробную части, то в десятичной системе это будет 3,21.
Согласитесь, что это очень далеко от числа 3,14 (конечно, если мы хотим получить
более-менее точный результат). Кроме того, это будет не совсем правильно,
так как такое преобразование отличается от аналогичной операции в десятичной системе.
Как быть? Давайте вспомним, что такое дробное число в десятичной системе:
3,14 = 3 * 100 + 1 * 10-1 + 4 * 10-2 = 3 + 1/10 + 4/100 = 3 + 0,1 + 0,04
А теперь по аналогии представим дробное число в двоичной системе:
11,11010010 = 1 * 21 + 1 * 20 + 1 * 2-1 + 1 * 2-2 + 0 * 2-3 + 1 * 2-4 + 0 * 2-5 + 0 * 2-6 + 1 * 2-7 + 0 * 2-8 = 2 + 1 + 1/2 + 1/4 + 0/8 + 1/16 + 0/32 + 0/64 + 1/128 + 0/256 = 3 + 0,5 + 0,25 + 0 + 0,0625 + 0 + 0 + 0,078125 + 0 = 3,890625 !!!
Похоже, что мы совсем запутались. Понятно только одно – придуманный нами способ НЕ РАБОТАЕТ.
Поэтому пришло
время теории.