Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Представление чисел в ЭВМ

Читайте также:
  1. A.4 Графическое представление понятий
  2. А. 4 Графическое представление понятий
  3. А.З Связи между понятиями и их графическое представление
  4. АЛГОРИТМЫ СЛ-Я И В-Я ВЕЩЕСТВЕННЫХ ЧИСЕЛ
  5. Віднімання 4-ох байтних чисел
  6. Геометрическая интерпретация комплексных чисел
  7. Геометрическое изображение комплексных чисел

 

Целые

Беззнаковые целые.

Используется двоичное представление чисел.

x = an-1*2n-1 + an-2*2n-2 + … a1*21 + a0*20

здесь каждый член ai представляет собой 0 или 1 или, иначе говоря, одну цифру в двоичном представлении данных.

n задается количеством бит (в одном бите хранится одна двоичная цифра), отводящихся под данное число.

 

BCD - Binary Coded Decimal

В одном байте хранятся две цифры десятичного представления. Применяется, например, в СУБД Oracle для хранения вещественных чисел с плавающей точкой.

 

Целые со знаком.

Существует три основных формата:

 

Реально, в основном, используется только дополнительный код.

 

Утверждение 1. Представление чисел в дополнительном коде эквивалентно представлению чисел в кольце вычетов по модулю 2n, где n – количество бит в двоичном представлении числа.

 

Следствие. Операции сложения, вычитания и умножения корректно производятся независимо от способа интерпретации целых чисел – дополнительного кода (для знакового целого) или беззнакового целого.

 

Вещественные

 

Вещественные числа с фиксированной запятой.

VB тип Currency - восьмибайтовая переменная, которая содержит вещественное число в формате с фиксированной десятичной запятой (четыре десятичных знака после запятой).

 

C# тип decimal

Вещественные числа с плавающей запятой.

Формат закреплен IEEE: Institute of Electrical and Electronics Engineers.

Число представляется в виде

 

x = s * m * 2d

 

где

s – знак (отводится один бит)

m – мантисса в виде 1.xxxxx (где x – двоичная цифра; 1 не хранится)

d – степень (оставшиеся биты)

 

Согласно формату IEEE вместо степени хранится характеристика = d-dmin, где dmin – минимально возможное значение мантиссы. Таким образом, минимально возможное значение характеристики = 0.

На самом деле, по стандарту IEEE представление более сложное. Пока характеристика положительна поддерживается вышеуказанное представление. Для нулевой характеристики число хранится уже как число с фиксированное запятой в виде

 

x = p * 2-dmin

где p – число с фиксированной точкой в виде x.xxxxx (где x – двоичная цифра; хранятся все указанные биты!).

 

Таким образом, отрицательные степени двойки будут иметь битовое представление (степень выделена пробелами):

 

2-122: 1.88079e-037: 0 00000101 00000000000000000000000

2-123: 9.40395e-038: 0 00000100 00000000000000000000000

2-124: 4.70198e-038: 0 00000011 00000000000000000000000

2-125: 2.35099e-038: 0 00000010 00000000000000000000000

2-126: 1.17549e-038: 0 00000001 00000000000000000000000

2-127: 5.87747e-039: 0 00000000 10000000000000000000000

2-128: 2.93874e-039: 0 00000000 01000000000000000000000

2-129: 1.46937e-039: 0 00000000 00100000000000000000000

2-130: 7.34684e-040: 0 00000000 00010000000000000000000

2-131: 3.67342e-040: 0 00000000 00001000000000000000000

2-132: 1.83671e-040: 0 00000000 00000100000000000000000

2-133: 9.18355e-041: 0 00000000 00000010000000000000000

2-134: 4.59177e-041: 0 00000000 00000001000000000000000

2-135: 2.29589e-041: 0 00000000 00000000100000000000000

2-136: 1.14794e-041: 0 00000000 00000000010000000000000

2-148: 5.73972e-042: 0 00000000 00000000000000000000010

2-149: 2.86986e-042: 0 00000000 00000000000000000000001

2-150: 1.43493e-042: 0 00000000 00000000000000000000000

Т.е. число 2-150 уже неотличимо от 0.Если вышеуказанные число получались каждый раз путем деления предыдущего числа на 2, то в результате получения последнего число из 2-149 мы получили ситуацию underflow – нижнее переполнение. Как правило, процессоры могут отслеживать underflow, но нижнее переполнение можно расценивать как ошибку, а можно и не расценивать, ведь при многих вычислениях слишком маленькие числа можно расценивать как нулевые. Поэтому, обычно никаких сообщений в ситуации underflow не производится.

Переполнение при увеличении чисел называется overflow. При увеличении чисел с плавающей точкой степень увеличивается до максимально возможной. Когда степень достигает максимально возможного значения, то подобное число уже числом не считается, независимо от значения бит мантиссы:

 

2-118: 3.32307e+035: 0 11110101 00000000000000000000000

2-119: 6.64614e+035: 0 11110110 00000000000000000000000

2-120: 1.32923e+036: 0 11110111 00000000000000000000000

2-121: 2.65846e+036: 0 11111000 00000000000000000000000

2-122: 5.31691e+036: 0 11111001 00000000000000000000000

2-123: 1.06338e+037: 0 11111010 00000000000000000000000

2-124: 2.12676e+037: 0 11111011 00000000000000000000000

2-125: 4.25353e+037: 0 11111100 00000000000000000000000

2-126: 8.50706e+037: 0 11111101 00000000000000000000000

2-127: 1.70141e+038: 0 11111110 00000000000000000000000

2-128: 1.#INF: 0 11111111 00000000000000000000000

2-129: 1.#INF: 0 11111111 00000000000000000000000

2-130: 1.#INF: 0 11111111 00000000000000000000000

 

 

Итак, стандартом IEEE закреплено наличие дополнительных констант:

 

NAN – not a number. Не число = 0/0 [ (0111 1111)(1100 0000) 0…0]

+INF – плюс бесконечность [ (0111 1111)(1000 0000) 0…0]

-INF – минус бесконечность [ (1111 1111)(1000 0000) 0…0]

+0 = 0x00 00 00 00

-0 = 0x80 00 00 00

 

+INF, -INF,+0, -0 можно корректно сравнивать. +0 = = -0 = = 0.

NAN при сравнении возвращает ложь всегда кроме!=. В этом случае возвращается истина.

 

 

Для IBM PC:

 

float (32bit)

1bit – знак

8bits – степень+127 (127=27-1)

23bits – символы xxxxx из мантиссы (мантисса в виде 1.xxxxxx)

 

пример 1.f=

 

0 = знак

01111111 = степень+127 (занимает 8 бит)

0000…0 = символы xxxxx из мантиссы (мантисса в виде 1.xxxxxx)

Итого: 00111111 10000000 00000000 00000000

Осталось заметить, что байты идут в обратном порядке (также и в последующих примерах).

 

doudle (64bit)

1bit – знак

11bits – степень+210-1

42bits – символы xxxxx из мантиссы (мантисса в виде 1.xxxxxx)

 

пример 1.f=

00111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000

 

long double (80bit)

1bit – знак

15bits – степень+214-1

64bits – символы 1xxxxx из мантиссы (мантисса в виде 1.xxxxxx)

 

В некоторых версиях языка С тип long double присутствует, но является всего лишь синонимом типа double.


Дата добавления: 2015-10-30; просмотров: 133 | Нарушение авторских прав


Читайте в этой же книге: Постановка задачи | Сортировка пузырьком. | Сортировка слиянием с рекурсией. | Сортировка слиянием без рекурсии. | Доказательство корректности работы алгоритма. | Оценки времени работы алгоритма. | Некоторые задачи, сводящиеся к сортировке. | Сортировки и связанные с ними задачи. | SortB (A, N, M, B) | То return QFindStatP (A, p, j, k,N ) |
<== предыдущая страница | следующая страница ==>
Алгоритмы и алгоритмические языки| Нижние и верхние оценки.

mybiblioteka.su - 2015-2024 год. (0.01 сек.)