Компьютерное представление целых и вещественных чисел
12 июля 2020 г.Классная работа
Компьютерное представление
целых и вещественных чисел
2. Числовые величины
Целые(с фиксированной
запятой)
Вещественные
(с плавающей
запятой)
Ячейки памяти
Память компьютера состоит из
ячеек, в свою очередь состоящих
из некоторого числа однородных
элементов.
Каждый такой элемент служит
для хранения одного из битов разрядов
двоичного
числа.
Именно поэтому каждый элемент
ячейки называют битом или
разрядом.
(n-1)-й разряд
0 –й разряд
n разрядов — место хранения значения величины
4. Целые числа
МАТЕМАТИКА:множество
целых чисел
дискретно,
бесконечно,
не ограничено
ИНФОРМАТИКА:
множество
целых чисел
дискретно, конечно,
ограничено
Целые числа в памяти компьютера —
это дискретное, ограниченное и конечное
множество.
5. Целые числа без знака
Для хранения целых неотрицательных чисел без знака7
6
5
4
3
2
1
0
Номера разрядов
0
1
1
0
1
1
0
1
Биты, составляющие
число
0
0
0
0
0
0
0
0
Минимальное число 0
1
1
1
1
1
1
1
1
Максимальное число 25510
111111112 = 1000000002 -1 = 28 – 1 = 25510
Для n-разрядного представления максимальное целое
неотрицательное число равно 2n – 1.
6. Целые числа без знака
Пример. Представить число 5310 в двоичном виде ввосьмибитовом представлении в формате целого
без знака.
Решение.
5310 = 1101012
0
0
1
1
0
1
0
1
Целые числа без знака
Пример. Представить число 5310 в двоичном виде в
шестнадцатиразрядном представлении в
формате целого без знака.
Решение.
5310 = 1101012
0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 1
8. Диапазоны целых чисел без знака
В 8-разрядном представлении (от 0 до 28-1):от 0 до +255
В 16-разрядном представлении (от 0 до 216-1):
от 0 до +65535
В 32-разрядном представлении (от 0 до 232-1):
от 0 до +4294967295
В 64-разрядном представлении (от 0 до 264-1):
от 0 до +18446744073709551615
9. Целые числа со знаком (прямой код)
Для кодирования целых чисел со знаком отводят 8, 16, 32 или 64бита.
Старший разряд числа определяет его знак.
Если он равен 0, число положительное,
если 1, то отрицательное.
5310 = 1101012
0
0
1
1
0
0
1
1
-5310 = -1101012
1
0
1
1
0
0
1
1
Такое представление чисел в компьютере называется
прямым кодом.
10. Целые числа со знаком (дополнительный код)
Для кодирования целых чисел со знаком чаще используютдополнительный код.
Для кодирования целых чисел со знаком в дополнительном коде
отводят 8, 16, 32 или 64 бита.
Старший разряд числа также как и в прямом коде определяет его
знак.
Если он равен 0, число положительное,
Коды положительных чисел и числа 0 одинаковы при использовании
прямого или дополнительного кода для кодирования чисел со знаком.
11. Целые числа со знаком
Алгоритм получения дополнительного кода отрицательного числа:1. Записать двоичный код положительного числа в n
двоичных разрядах.
2. Значения всех битов инвертировать.
3. К полученному коду прибавить единицу.
Пример:
Представить число -201510 в двоичном виде в шестнадцатибитном
представлении в формате целого числа со знаком в
дополнительном коде.
Дополнительный код
201510
00000111 110111112
Инвертирование
11111000 001000002
Прибавление единицы
11111000 001000002
00000000 000000012
11111000 001000012
Ответ: -201510 = 11111000001000012
12. Диапазон целых чисел со знаком в дополнительном коде
Для n-разрядного представления со знаком вдополнительном коде:
•минимальное число равно
– 2n-1
•максимальное число равно 2n-1 – 1
13. Диапазоны целых чисел со знаком в дополнительном коде
В 8-разрядном представлении (от –27 до 27-1):от -128 до +127
В 16-разрядном представлении (от –215 до 215-1):
от -32768 до +32767
В 32-разрядном представлении (от –231 до 231-1):
от -2147483648 до +2147483647
В 64-разрядном представлении (от –263 до 263-1):
от -9223372036854775808
до +9223372036854775807
14. Вещественные числа
МАТЕМАТИКА:множество
вещественных чисел
непрерывно,
бесконечно,
не ограничено
ИНФОРМАТИКА:
множество
вещественных чисел
дискретно, конечно,
ограничено
Вещественные числа в памяти компьютера
— это также дискретное, ограниченное и
конечное множество.
15. Вещественные числа
011 1 1 1 1 1
знак и порядок
01
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
знак
и
мантисса
Вещественные (действительные) числа хранятся и
обрабатываются в компьютере в формате с плавающей
запятой, т. е. в виде мантиссы и показателя степени
n
A=M q
M – мантисса числа (правильная отличная от нуля дробь),
q – основание системы счисления,
n – порядок числа.
16. Нормализация числа
Число нормализуют так, чтобы целая часть мантиссысостояла из одной цифры, причём не нуля.
Например число 123,45 можно нормализовать так:
123,45 = 1,2345 · 102
Порядок указывает, на какое количество позиций и в каком
направлении должна сместиться десятичная запятая в мантиссе.
В компьютере поступают аналогично, только со
степенью 2!
17. Различные типы вещественных чисел
Для чисел в формате с плавающей запятой могутиспользоваться различные типы:
4 байта (одинарная точность) ,
6 байт (достаточная точность),
8 байт (двойная точность).
При записи числа выделяются разряды для хранения знака
мантиссы, знака порядка, порядка и мантиссы.
A = M qn
Размер мантиссы M определет точность чисел.
Размер порядка n определяют диапазон чисел.
Формат числа одинарной точности
Число одинарной точности — компьютерный формат представления чисел,
занимающий 32 бита (или 4 байта). Используется для работы с
вещественными числами, когда не нужна очень высокая точность.
Знак
Порядок (8 бит)
Мантисса (23+1 бита)
0 0 0 0 0 0 0 0 0 1, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
30
23
Порядок со знаком
записан в смещённом коде
128
11111111
127
11111110
…
2
10000001
1
10000000
0
01111111
-1
01111110
-2
01111101
…
-126
00000001
-127
00000000
22
0
Из мантиссы записываются только 23
цифры дробной части (целая часть
числа всегда равна 1, её хранить
незачем!)
Знак числа: 0 – плюс, 1 – минус
Максимальное число
2128 = 3,4028234×1038
Пример
Преобразовать число 0,5 в двоичный код в формате
четырёхбайтового вещественного числа.
-1
0,5 = +1,0*2
0
0
01111110
0 0 1 1 1 1 1 1 0 1, 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ответ: 00111111 00000000 00000000 00000000
Задание
Преобразовать число 1,5 в двоичный код в
формате четырёхбайтового вещественного
числа (решение и ответ письменно).
Работаем за компьютером
Домашнее задание
Просмотрите видео
https://www.youtube.com/watch?v=KPLPbKSCMww
Проверьте свои знания
https://testedu.ru/test/informatika/10klass/predstavlenie-chisel-v-kompyutere.html
Представление целых и вещественных чисел в компьютере — 8 КЛАСС ► Информатика в школе и дома
Представление целых чисел
Оперативная память компьютера состоит из ячеек, каждая из которых представляет собой физическую систему, состоящую из некоторого числа однородных элементов. Эти элементы обладают двумя устойчивыми состояниями, одно из которых соответствует нулю, а другое — единице. Каждый такой элемент служит для хранения одного из битов — разряда двоичного числа. Именно поэтому каждый элемент ячейки называют битом или разрядом.
Для компьютерного представления целых чисел используется несколько различных способов, отличающихся друг от друга количеством разрядов (под целые числа обычно отводится 8,16,32 или 64 разряда) и наличием или отсутствием знакового разряда.
Беззнаковое представление можно использовать только для неотрицательных целых чисел, отрицательные числа представляются только в знаковом виде.
Беззнаковое представление используется для таких объектов, как адреса ячеек, всевозможные счётчики (например, число символов в тексте), а также числа, обозначающие дату и время, размеры графических изображений в пикселях и т. д. Максимальное значение целого неотрицательного числа достигается в случае, когда во всех разрядах ячейки хранятся единицы.
Для n-разрядного представления оно будет равно 2n−1 . Минимальное число соответствует n нулям, хранящимся в n разрядах памяти, и равно нулю. Ниже приведены максимальные значения для беззнаковых целых n-разрядных чисел:
Для получения компьютерного представления беззнакового целого числа достаточно перевести число в двоичную систему счисления и дополнить полученный результат слева нулями до стандартной разрядности.
Число 5310=1101012 в восьмиразрядном представлении имеет вид:
Это же число 53 в шестнадцати разрядах будет записано следующим образом:
При представлении со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды — под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное — 1. Такое представление чисел называется прямым кодом. В компьютере прямые коды используются для хранения положительных чисел в запоминающих устройствах, для выполнения операции с положительными числами.
Представление вещественных чиселЛюбое вещественное число A может быть записано в экспоненциальной форме: A=±m⋅qp, где
m — мантисса числа;
q — основание системы счисления;
р — порядок числа.
Например, число 472000000 может быть представлено так:
- 472000000=4,72⋅108
- 472000000=47,2⋅107
- 472000000=472,0⋅106
С экспоненциальной формой записи чисел вы могли встречаться при выполнении вычислений с помощью калькулятора, когда в качестве ответа получали записи следующего вида: 4,72E+8.
Здесь знак «E» обозначает основание десятичной системы счисления и читается как «умножить на десять в степени». Из приведённого выше примера видно, что положение запятой в записи числа может изменяться. Для единообразия мантиссу обычно записывают как правильную дробь, имеющую после запятой цифру, отличную от нуля. В этом случае число 472000000 будет представлено как 0,472⋅109.
Вещественное число может занимать в памяти компьютера 32 или 64 разряда. При этом выделяются разряды для хранения знака мантиссы, знака порядка, порядки и мантиссы. Пример:
Диапазон представления вещественных чисел определяется количеством разрядов, отведённых для хранения порядка числа, а точность определяется количеством разрядов, отведённых для хранения мантиссы.
Максимальное значение порядка числа для приведённого выше примера составляет 11111112=12710, и, следовательно, максимальное значение числа: 0,11111111111111111111111⋅101111111.
Широкий диапазон представления вещественных чисел важен для решения научных и инженерных задач. Вместе с тем следует понимать, что алгоритмы обработки таких чисел более трудоёмки по сравнению с алгоритмами обработки целых чисел.
Рекомендованный список литературыБосова Л.Л. Информатика — Учебник для 8 класса. – М.: БИНОМ. Лаборатория знаний
§ 1.2. Представление чисел в компьютере
Информатика. 8 класса. Босова Л.Л. Оглавление
Ключевые слова:
- разряд
- беззнаковое представление целых чисел
- представление целых чисел со знаком
- представление вещественных чисел
1.2.1. Представление целых чисел
Оперативная память компьютера состоит из ячеек, каждая из которых представляет собой физическую систему, состоящую из некоторого числа однородных элементов. Эти элементы обладают двумя устойчивыми состояниями, одно из которых соответствует нулю, а другое — единице. Каждый такой элемент служит для хранения одного из битов — разряда двоичного числа. Именно поэтому каждый элемент ячейки называют битом или разрядом (рис. 1.2).
Рис. 1.2. Ячейка памяти
Для компьютерного представления целых чисел используется несколько различных способов, отличающихся друг от друга количеством разрядов (под целые числа обычно отводится 8, 16, 32 или 64 разряда) и наличием или отсутствием знакового разряда. Беззнаковое представление можно использовать только для неотрицательных целых чисел, отрицательные числа представляются только в знаковом виде.
Беззнаковое представление используется для таких объектов, как адреса ячеек, всевозможные счётчики (например, число символов в тексте), а также числа, обозначающие дату и время, размеры графических изображений в пикселях и т. д.
Ниже приведены максимальные значения для беззнаковых целых n-разрядных чисел:
Для получения компьютерного представления беззнакового целого числа достаточно перевести число в двоичную систему счисления и дополнить полученный результат слева нулями до стандартной разрядности.
Пример 1. Число 5310 = 1101012 в восьмиразрядном представлении имеет вид:
Это же число 53 в шестнадцати разрядах будет записано следующим образом:
При представлении со знаком самый старший (левый) разряд отводится под знак числа, остальные разряды — под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное — 1. Такое представление чисел называется прямым кодом. В компьютере прямые коды используются для хранения положительных чисел в запоминающих устройствах, для выполнения операций с положительными числами.
На сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/) размещён информационный модуль «Число и его компьютерный код». С помощью этого ресурса вы можете получить дополнительную информацию по изучаемой теме.
Для выполнения операций с отрицательными числами используется дополнительный код, позволяющий заменить операцию вычитания сложением. Узнать алгоритм образования дополнительного кода вы можете с помощью информационного модуля «Дополнительный код», размещённого на сайте Федерального центра информационно-образовательных ресурсов (http://fcior.edu.ru/).
1.2.2. Представление вещественных чисел
Любое вещественное число А может быть записано в экспоненциальной форме:
где:
- m — мантисса числа;
- q — основание системы счисления;
- р — порядок числа.
Например, число 472 000 000 может быть представлено так: 4,72 • 108, 47,2 • 107, 472,0 • 106 и т. д.
С экспоненциальной формой записи чисел вы могли встречаться при выполнении вычислений с помощью калькулятора, когда в качестве ответа получали записи следующего вида: 4.72Е+8.
Здесь знак «Е» обозначает основание десятичной системы счисления и читается как «умножить на десять в степени».
Из приведённого выше примера видно, что положение запятой в записи числа может изменяться.
Для единообразия мантиссу обычно записывают как правильную дробь, имеющую после запятой цифру, отличную от нуля. В этом случае число 472 000 000 будет представлено как 0,472 • 109.
Вещественное число может занимать в памяти компьютера 32 или 64 разряда. При этом выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Пример:
Диапазон представления вещественных чисел определяется количеством разрядов, отведённых для хранения порядка числа, а точность определяется количеством разрядов, отведённых для хранения мантиссы.
Максимальное значение порядка числа для приведённого выше примера составляет 11111112 = 12710, и, следовательно, максимальное значение числа:
- 0,11111111111111111111111 • 101111111
Попытайтесь самостоятельно выяснить, каков десятичный эквивалент этой величины.
Широкий диапазон представления вещественных чисел важен для решения научных и инженерных задач. Вместе с тем следует понимать, что алгоритмы обработки таких чисел более трудоёмки по сравнению с алгоритмами обработки целых чисел.
Самое главное о представление чисел в компьютере
Для компьютерного представления целых чисел используются несколько различных способов, отличающихся друг от друга количеством разрядов (8, 16, 32 или 64) и наличием или отсутствием знакового разряда. Для представления беззнакового целого числа его следует перевести в двоичную систему счисления и дополнить полученный результат слева нулями до стандартной разрядности. При представлении со знаком самый старший разряд отводится под знак числа, остальные разряды — под само число. Если число положительное, то в знаковый разряд помещается 0, если число отрицательное, то 1. Положительные числа хранятся в компьютере в прямом коде, отрицательные — в дополнительном. Вещественные числа в компьютере хранятся в формате с плавающей запятой. При этом любое число записывается так:
А = ±m • qP,
где:
- m — мантисса числа;
- q — основание системы счисления;
- р — порядок числа.
Вопросы и задания
1. Ознакомьтесь с материалами презентации к параграфу содержащейся в электронном приложении к учебнику. Используйте эти подготовке ответов на вопросы и выполнении заданий.
2. Как в памяти компьютера представляются целые положительные и отрицательные числа.
3. Любое целое число можно рассматривать как вещественное, но с нулевой дробной частью. Обоснуйте целесообразность наличия особых способов компьютерного представления целых чисел
4. Представьте число 6310 в без знаковом 8-разрядном формате.
5. Найдите десятичные эквиваленты чисел по их прямым кодам записанный в 8 разрядном формате со знаком: А)01001100 Б)00010101
6. Какие из чисел 4438, 1010102, 25610 можно сохранить в 8-разрядном формате?
7. Запишите следующие числа в естественной форме: а) 0,3800456 · 102; б) 0,245 · 10−3; в) 1,256900Е+5; г) 9,569120Е-3.
8. Запишите число 2010 0102 пятью различными способами в экспоненциальной форме
9. Запишите следующие числа в экспоненциальной форме с нормализованной мантиссой правильной дробью, имеющей после запятой цифру отличную от нуля
10. Изобразите схему связывающую основные понятия рассмотренные, а данном параграфе
Оглавление
§ 1.1. Системы счисления
§ 1.2. Представление чисел в компьютере
§ 1.3. Элементы алгебры логики
1. |
Целые числа
Сложность: лёгкое |
1 |
2. |
Восьмиразрядное представление числа
Сложность: лёгкое |
1 |
3. |
Хранение числа в памяти компьютера
Сложность: среднее |
2 |
4. |
Представление числа
Сложность: среднее |
2 |
5. |
Число в однобайтовом формате
Сложность: среднее |
2 |
6. |
Компьютерное представление беззнакового целого числа
Сложность: среднее |
2 |
7. |
Экспоненциальная запись
Сложность: сложное |
3 |
8. |
Компьютерный способ экспоненциальной записи
Сложность: сложное |
3 |
9. |
Определение десятичного числа
Сложность: сложное |
3 |
1. | Целые числа | 1 вид — рецептивный | лёгкое | 1 Б. | Задание направлено на закрепление и систематизацию знаний о целых числах. |
2. | Восьмиразрядное представление числа | 1 вид — рецептивный | лёгкое | 1 Б. | Задание направлено на закрепление и систематизацию знаний о восьмиразрядном представлении числа. |
3. | Хранение числа в памяти компьютера | 2 вид — интерпретация | среднее | 2 Б. | Задание направлено на закрепление знаний о хранении чисел в памяти компьютера. |
4. | Представление числа | 2 вид — интерпретация | среднее | 2 Б. | Задание направлено на закрепление и систематизацию знаний о экспоненциальной форме числа. |
5. | Число в однобайтовом формате | 2 вид — интерпретация | среднее | 2 Б. | Задание направлено на закрепление и систематизацию знаний о форматах хранения чисел в памяти компьютера. |
6. | Компьютерное представление беззнакового целого числа | 2 вид — интерпретация | среднее | 2 Б. | Задание направлено на закрепление и систематизацию знаний о беззнаковом представлении чисел в компьютере. |
7. | Экспоненциальная запись | 3 вид — анализ | сложное | 3 Б. | Задание направлено на закрепление и систематизацию знаний об экпоненциальной форме записи числа. |
8. | Компьютерный способ экспоненциальной записи | 3 вид — анализ | сложное | 3 Б. | Задание направлено на закрепление и систематизацию знаний об экпоненциальной форме записи числа. |
9. | Определение десятичного числа | 3 вид — анализ | сложное | 3 Б. | Задание направлено на закрепление и систематизацию знаний о восьмиразрядном формате хранения чисел. |
Вычитание в двоичной системе счисления
Тема 3. ПРЕДОСТАВЛЕНИЕ ЧИСЕЛ В КОМПЬЮТЕРЕ
Вопросы:
1. Компьютерное представление целых и вещественных чисел.
2. Арифметика двоичных чисел
2.1. Сложение в двоичной системе счисления.
2.2. Вычитание в двоичной системе счисления.
2.3. Умножение в двоичной системе счисления
Компьютерное представление целых и вещественных чисел
Для хранения чисел в памяти компьютера используется два формата: целочисленный (Целые числа) и с плавающей точкой (Вещественные числа).
Целые числа используется для представления в компьютере целых положительных и отрицательных чисел.
Целые числа изображаются в виде последовательности цифр с постоянным для всех чисел положением запятой (или точки), отделяющей целую часть от дробной.
Эта форма проста и привычна для большинства пользователей, но имеет небольшой диапазон представления чисел и поэтому не всегда пригодна при вычислениях. Если же в результате какой-либо арифметической операции получается число, выходящее за допустимый диапазон, то происходит переполнение разрядной сетки, и все дальнейшие вычисления теряют смысл.
Однобайтовое представление применяется только для положительных целых чисел. В этом формате отсутствует знаковый разряд. Наибольшее двоичное число, которое может быть записано при помощи 1 байта, равно 11111111, что в десятичной системе счисления соответствует числу 25510.
Для положительных и отрицательных целых чисел обычно используется 2 и 4 байта, при этом старший бит выделяется под знак числа: 0 — плюс, 1 — минус.
Вещественные числаиспользуется для представления в компьютере действительных чисел. Вещественные числаразмещаются, как правило, в 4 или 8 байтах.
Нормализованная форма представления чисел обеспечивает огромный диапазон их записи и является основной в современных ЭВМ.
Арифметика двоичных чисел
Рассмотрим арифметические действия в двоичной системе счисления. Сначала отметим, что 12+12=102. Почему? Во-первых, вспомним, как в привычной десятичной системе счисления появилась запись 10. К количеству, обозначенному старшей цифрой десятичного алфавита 9, прибавляем 1. Получается количество, для обозначения которого одной цифрой в алфавите цифр уже не осталось. Приходится для полученного количества использовать комбинацию двух цифр алфавита, то есть представлять данное количество наименьшим из двухразрядных чисел: 910+110=1010. Аналогичная ситуация складывается в случае двоичной системы счисления. Здесь количество, обозначенное старшей цифрой 12 двоичного алфавита, увеличивается на единицу. Чтобы полученное количество представить в двоичной системе счисления, также приходится использовать два разряда. Для наименьшего из двухразрядных чисел здесь тот же единственный вариант: 102. Во-вторых, важно понять, что 102? 1010. Строго говоря, в двоичной системе счисления это и читать надо не “десять”, а “один ноль”. Верным является соотношение 102 = 210. Здесь слева и справа от знака равенства написаны разные обозначения одного и того же количества. Это количество просто записано с использованием алфавитов разных систем счисления – двоичной и десятичной. Вроде, как мы на русском языке скажем “яблоко”, а на английском про тот же предмет – “apple”, и будем правы в обоих случаях.
Сложение в двоичной системе счисления.
После этих предварительных рассуждений запишем правило выполнения в двоичной системе счисления арифметического сложения одноразрядных чисел:
02 + 02 = 02;
12 + 02 = 12;
02 + 12 = 12;
12 + 12 = 102.
Правила двоичного сложения предельно просты. Только в одном случае, когда производится сложение 12 + 12, происходит перенос в старший разряд.
Например, найти сумму двоичных чисел 1001101102 и 1101101112
+ | |||||||||||||||||||
Ответ: 10111011012.
Вычитание в двоичной системе счисления
Исходя из того, что вычитание есть действие, обратное сложению, запишем правило арифметического вычитания одноразрядных чисел в двоичной системе счисления:
02 – 02 = 02;
12 – 02 = 12;
12 – 12 = 02;
102 – 12 = 12.
Используя это правило, можно проверить правильность произведенного выше сложения вычитанием из полученной суммы одного из слагаемых. При этом чтобы вычесть в каком-либо разряде единицу из нуля, необходимо “занимать” недостающее количество в соседних старших разрядах (так же, как в десятичной системе счисления поступают при вычитании большего числа из меньшего). При этом все нули, у которых мы не могли занять разряд, необходимо поменять на единицу, т.к. 0-1=-1. Желательно все изменения в цифрах записывать сверху данного вычитания. Дальнейшее вычитание выполнять с получившимися сверху цифрами.
Например, найти разность двоичных чисел 11001101102 и 1101101112
— | |||||||||||||||||||
Ответ: 1011111112.
ПРЕДСТАВЛЕНИЕ ЧИСЕЛ В КОМПЬЮТЕРЕ МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ
Представление чисел в компьютере
Представление чисел в компьютере ГОУ СОШ с углубленным изучением математики, информатики, физики 444 Числа Целые Вещественные Без знака Со знаком Прямой код Положительные Отрицательные Прямой код = Дополнительный
ПодробнееМетодические рекомендации:
Решение задач на тему «Представление чисел в компьютере». Типы задач. 1. Целые числа. Представление чисел в формате с фиксированной запятой. 2. Дробные числа. Представление чисел в формате с плавающей
ПодробнееПредставление чисел в ЭВМ
А. А. Вылиток Представление чисел в ЭВМ 1. Информация и данные Информация (от лат. information разъяснение, изложение) содержание (смысл) сообщения или сигнала, сведения, рассматриваемые в процессе их
ПодробнееТема 7. Представление информации в ЭВМ.
Тема 7. Представление информации в ЭВМ.. Единицы информации. Бит — (bit-biry digit — двоичный разряд) наименьшая единица информации — количество её, необходимое для различения двух равновероятных событий.
ПодробнееИНФОРМАТИКА 8 класс МОСКВА «ВАКО» 2017
ИНФОРМАТИКА 8 класс МОСКВА «ВАКО» 2017 УДК 372.862 ББК 74.262.8 К65 6+ Издание допущено к использованию в образовательном процессе на основании приказа Министерства образования и науки РФ от 09.06.2016
ПодробнееАрифметические основы компьютеров
Арифметические основы компьютеров (По материалам http://book.kbsu.ru/) 1. Что такое система счисления? Система счисления это совокупность приемов и правил, по которым числа записываются и читаются. Существуют
ПодробнееПрактикум (лабораторный). Дополнение 1
Практикум (лабораторный). Дополнение 1 Лабораторная работа 1. Представление информации 3.3.Преобразование дробной части десятичного числа Преобразование дробной части выполняется за счет умножения на основание
ПодробнееКодирование числовой информации
Кодирование числовой информации Для представления чисел используются системы счисления. Система счисления это знаковая система, в котор ой числа записываются по определенным правилам с помощью символов
ПодробнееМашинное представление чисел
Машинное представление чисел Целые числа Беззнаковые числа В современных ЭВМ для представления чисел используется двоичная система счисления. При использовании для представления положительных целых чисел
Подробнее,7= =757,7.
1. Что такое система счисления? Система счисления это совокупность приемов и правил, по которым числа записываются и читаются. Существуют позиционные и непозиционные системы счисления. В непозиционных
ПодробнееЭлектронный учебник по информатике
Электронный учебник по информатике Системы Перевод чисел из двоичной системы Арифметичиские операции в позиционных системах формате с плавающей. Постановка проблемы: Изучая предмет информатики в школе,
ПодробнееПредставление целых чисел в компьютере
Представление целых чисел в компьютере Вся информация, которую обрабатывает компьютер представлена в двоичном коде с помощью двух цифр: 0 и 1 Привет! 1001011 Целые числа представлены в двоичной системе
Подробнееn q 1 a 1 a a q n A = n n q n m s 2
Лекция 5 Основы представления информации в цифровых автоматах Позиционные системы счисления Системой счисления называется совокупность приемов и правил для записи чисел цифровыми знаками. Любая предназначенная
ПодробнееПриложение 1 Практикум к главе 2
Приложение 1 Практикум к главе 2 «Представление информации в компьютере» Практическая работа к п. 2.1 Пример 2.1. Представьте в виде разложения по степеням основания числа 2466,675 10, 1011,11 2. Для десятичного
ПодробнееКомпьютерная арифметика
1 Компьютерная арифметика 26. Особенности представления чисел в компьютере 27. Хранение в памяти целых чисел 28. Операции с целыми числами 29. Хранение в памяти вещественных чисел 30. Операции с вещественными
ПодробнееБабкина Наталья Анатольевна
Бабкина Наталья Анатольевна «Машинные» системы счисления. Представление целых чисел в компьютере. Цели- задачи: Знать: Основные понятия: переполнение, дискретность, машинные системы счисления. Особенности
ПодробнееИнформационные основы ЭВМ
Информационные основы ЭВМ 1. Системы счисления.. равила перевода чисел из одной системы счисления в другую. 3. Способы представления чисел в ЭВМ. 4. Машинные коды двоичного числа. Системы счисления Можно
Подробнееa x j a j Пример: 28=1*2 4 +1*2 3 +1*2 2 +0*2 1 +0*2 0
Лекция 2 Цифровые методы представления информации. Цифровые коды. Двоичная и шестнадцатиричная системы счисления. Перевод чисел из одной системы счисления в другую. Двоичная арифметика. Формы представления
ПодробнееПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ
ПРЕДСТАВЛЕНИЕ ИНФОРМАЦИИ В КОМПЬЮТЕРЕ Информация в ЭВМ кодируется, как правило, в двоичной или в двоично-десятичной системе счисления. Система счисления это способ наименования и изображения чисел с помощью
ПодробнееОСНОВЫ АРИФМЕТИКИ ЦИФРОВЫХ ПРОЦЕССОРОВ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Н. П. Вашкевич, Е. И. Калиниченко ОСНОВЫ АРИФМЕТИКИ
ПодробнееАрифметические основы работы компьютера
Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования «Тихоокеанский государственный университет» Арифметические основы
ПодробнееПредставление чисел в памяти
Представление чисел в памяти Иван Казменко Кружок по алгоритмам и структурам данных в СПбГДТЮ Четверг, 16 февраля 2012 года Иван Казменко (Кружок в СПбГДТЮ) Представление чисел 16.02.2012 1 / 15 Оглавление
ПодробнееЛабораторная работа 1 Системы счисления
Лабораторная работа 1 Системы счисления Цель работы: овладеть приемами перевода чисел из одной системы счисления в другую Теоретические сведения Под системой счисления понимается способ представления чисел
ПодробнееА1 (базовый уровень, время 1 мин)
А1 (базовый уровень, время 1 мин) Тема: Системы счисления и двоичное представление информации в памяти компьютера. Что нужно знать: перевод чисел между десятичной, двоичной, восьмеричной и шестнадцатеричной
ПодробнееN=2 i i Информационный вес символа, бит
Примеры решения задач по Информатике по темам раздела ИНФОРМАЦИЯ И ИНФОРМАЦИОННЫЕ ПРОЦЕССЫ специальность 20.02.01 1 курс Основы теории В вычислительной технике битом называют наименьшую «порцию» памяти
ПодробнееРИМСКАЯ СИСТЕМА СЧИСЛЕНИЯ
Системы счисления Системы счисления делятся на позиционные и непозиционные. В позиционной системе вес цифры зависит от ее позиции (места) в числе. В непозиционной не зависит. Примером непозиционной СС
ПодробнееДВОИЧНОЕ КОДИРОВАНИЕ ИНФОРМАЦИИ
ДВОИЧНОЕ КОДИРОВАНИЕ ИНФОРМАЦИИ В компьютере для представления информации используется двоичное кодирование, так как удалось создать надежно работающие технические устройства, которые могут со стопроцентной
ПодробнееСложение и вычитание, установка флагов
Сложение и вычитание установка флагов Вылиток А.А. Грацианова Т.Ю. Определим операции сложения и вычитания на множестве битовых наборов длины k. Пусть x и y битовые наборы. Перенумеруем биты наборов справа
ПодробнееКомпьютерное представление чисел
Компьютерное представление чиселБольшинство компьютеров представляют целые числа как двоичные числа (см. раздаточный материал по математике) с участием определенное количество бит. Компьютер с 16-битными целыми числами может представлять целые числа от 0 до 65 535 (то есть от 0 до 2 16 -1), или если он решит сделать половину из них отрицательными, с -32 767 до 32 767. (Мы не будем вдаваться в подробности того, как компьютеры обрабатывают отрицательные числа прямо сейчас.) 32-битное целое число может представлять значения от 0 до 4294967295, или + -2 147 483 647.
Большинство современных компьютеров представляют собой настоящие (т.е. дробное) числа с использованием экспоненциальная запись. (Опять таки, см. раздаточный материал для повторения уроков по математике. Собственно, глубоко внутри компьютеры обычно используйте степень 2 вместо степени 10, но сейчас разница для нас не важна.) Преимущество использования экспоненциальной записи для действительных чисел: что это позволяет вам торговать диапазоном и точностью значений в полезный способ. Поскольку существует бесконечно большое количество действительных чисел (и в трех направлениях: очень большое, очень маленькое и очень негативное), никогда не удастся представить их всех (без использования потенциально бесконечного пространства).
Предположим, вы решили дайте себе шестизначный десятичный знак памяти (то есть, вы решили выделить немного памяти может содержать шесть цифр) для каждого значения. Если поставить три цифры слева и три справа десятичной запятой, вы можете представлять числа от 999,999 до -999,999, и всего 0,001. (Более того, у вас везде будет разрешение 0,001: вы можете представить 0,001 и 0,002, а также 999.998 и 999.999.) Это была бы работоспособная схема, хотя 0.001 — не очень маленькое число и 999.999 не очень большой.
Если, с другой стороны, вы использовали экспоненциальную запись, с четырьмя цифрами для основного числа и двумя цифрами для экспонента, вы можете представлять числа из 9,999 x 10 99 к -9,999 x 10 99 , и такой маленький, как 1 x 10 -99 (или, если вы обманываете, 0,001 x 10 -99 ). Теперь вы можете представлять как гораздо большие числа, так и гораздо меньшие; компромисс в том, что абсолютное разрешение больше не является постоянным, и становится меньше по мере увеличения абсолютного значения чисел.Число 123,456 может быть представлено только как 123,4, а число 123 456 может быть представлено только как 123 400. Вы больше не можете представлять 999,999; вам придется довольствоваться 999,9 (9,999 x 10 2 ) или 1000 (1.000 x 10 3 ). Вы больше не можете различать 999.998 и 999.999.
Поскольку надстрочные индексы трудно вводить, языки компьютерного программирования обычно используют немного другие обозначение. Например, число 1.234 x 10 5 возможно обозначается цифрой 1.234e5, где буква е заменяет часть « умножить на десять на ».
Вы часто будете слышать настоящие, экспоненциальные числа числа, называемые на компьютерах как « числа с плавающей запятой » или просто « плавающие » а также вы также услышите термин « двойной », который является сокращением от « число двойной точности с плавающей запятой ». Некоторые компьютеры также используют вещественные числа с фиксированной запятой, (которые работают по линиям наших « три слева, три до правильный » пример на несколько абзацев назад), но это сравнительно редко, и нам не нужно обсуждать их.
Важно помнить, что точность чисел с плавающей запятой количество обычно ограничено, и это может привести к неожиданным результатам. Результат такого деления, как 1/3, не может быть представлен точно. (это бесконечно повторяющаяся дробь, 0,333333 …), так что вычисление (1/3) x 3 имеет тенденцию давать результат вроде 0.999999 … вместо 1.0. Более того, по основанию 2 дробь 1/10 или 0,1 в десятичной системе счисления, также — бесконечно повторяющаяся дробь, и также не могут быть представлены точно, так (1/10) x 10 также может дать 0.999999 …. По этим и другим причинам вычисления с плавающей запятой редко бывает точным. При работе с компьютером с плавающей запятой вы должны быть осторожны, чтобы не сравнивать два числа на предмет точного равенства, и вы должны убедиться, что « ошибка округления » не накапливается пока это серьезно не ухудшит результаты ваших расчетов.
Читайте последовательно: предыдущий следующий вверх Топ
Эта страница Стива Саммита // Авторское право 1995, 1996 // отправить отзыв по электронной почте
Вещественные числа, арифметика с плавающей запятой и логические операции
Лекция 3: Вещественные числа, арифметика с плавающей запятой и логические операции Лекция 3ЦЕЛИ ОБУЧЕНИЯ :
1. Узнайте, как реальные данные хранятся в двоичном формате .2. Узнайте об арифметике с плавающей запятой .
3. Узнайте о логических операциях с двоичными числами .
СОДЕРЖАНИЕ
3.1 РЕАЛЬНЫЕ ДАННЫЕ И КОМПЬЮТЕРЫ
3.1.1 Почему мы используем плавающую точку формат?3.1.2 Представление с плавающей запятой числа
3.1.3 Формат с плавающей запятой IEEE вместе с Field Trip
3.2 АРИФМЕТИКА ПЛАВАЮЩЕЙ ТОЧКИ3.3 ЛОГИЧЕСКИЕ ОПЕРАЦИИ НАД ДВОИЧНЫМИ ЧИСЛАМИ
3.4 РЕЗЮМЕ
Если вы хотите сделать упражнения, вот немного контрольный опрос.
3,1 РЕАЛЬНЫЕ ДАННЫЕ И КОМПЬЮТЕРЫ
3.1.1 Почему мы используем числа с плавающей запятой
формат?
Как правило, компьютеры хранят действительные числа в Научной нотации ,
или Формат с плавающей запятой .Это означает, что вместо хранения
двоичное число 1010.1101, как оно сейчас написано на экране, компьютер
может представлять его внутренне как 0,10101101 * 2 4 . Причины
этот выбор формата станет ясным, когда мы рассмотрим различия
между представлениями с фиксированной запятой и с плавающей запятой .
- Представление с фиксированной точкой и с плавающей точкой
Пример:
Целочисленная арифметика | Арифметика с фиксированной точкой I | Случай арифметики с фиксированной точкой II |
587965 + 197548 ________ 785513 | 587.965 + 197,548 _________ 785,513 | 00000.25858 + 78454.10000 ____________ 78454.35858 |
Как видите, вычисления с фиксированной точкой и целочисленной арифметикой полностью идентичны, все, что нам нужно сделать, это отслеживать расположение десятичной точки. Таким образом, компьютер может внутренне представлять действительные числа как целые, выполнять с ними целочисленную арифметику и просто масштабируйте конечные результаты перед их выводом.Преимущество фиксированной точки Представление состоит в том, что для этого не требуется сложного программного или аппаратного обеспечения. реализовано. Тогда почему это не удобный способ изобразить настоящую числа?
Помните, что при представлении с фиксированной точкой мы резервируем фиксированное число битов слева и справа от двоичной точки. Во многих случаях, нам потребуется зарезервировать несколько слов для представления большого диапазона значений. Рассмотрим астрофизика, который работает с числами в диапазоне от массы Солнца (19
000000000000000000000000000 грамм) на массу электрон (0.000000000000000000000000000
6 грамм), или экономист, который работает со значениями от 0,01 доллара до государственного долга Канады или США (канадский долг составляет около 575 миллиардов долларов (данные 1998 г.), американская долг в пару раз больше). Этим людям придется принять экстравагантно большое количество бит для представления очень большого интервала чисел, чтобы убедитесь, что любое число из интересующего интервала может уместиться в выделенном Космос. Например, астрофизику потребуется ок.14 байт для целая часть числа и 12 байтов для дробной части — это составляет 26-байтовое (208-битное) слово! Использование научной нотации или плавающей Точечный формат значительно уменьшит пространство для хранения, необходимое для огромных чисел. как и приведенные выше, потому что в этих числах много нулей, но мало значимые фигуры. В научных обозначениях масса Солнца становится 1,99 * 10 33 грамм. Само собой разумеется, что числа 1,99, 10 и 33 требует гораздо меньше места для хранения, чем 34-значное число с фиксированной точкой.Обратите внимание, что для конкретной машины, работающей с небольшим диапазоном чисел, система с фиксированной точкой — жизнеспособная альтернатива для представления действительных чисел, из-за простой реализации. Однако это не так для универсальные компьютеры.
Теперь, когда мы увидели, почему формат с плавающей запятой намного более популярен.
чем формат с фиксированной точкой, наша новая задача — найти систематический
метод представления чисел с плавающей запятой в виде строк из единиц и нулей.
3.1.2 Представление с плавающей запятой
номера
Числа с плавающей запятой представлены в виде m * r e ,
где м — это мантисса , r — это основание или с основанием , а e — это показатель степени .
Пример:
Двоичное число с плавающей запятой может быть представлено внутри компьютера. в виде двоичной последовательности с 2 полями, как показано ниже:1.011011 2 * 2 3 эквивалентно 1011.011 2
Мантисса равна 1,011011, система счисления равна 2, а показатель степени равен 3.
Показатель степени ( e ) | Мантисса ( м ) |
Система счисления r понимается как 2 и компьютеру не требуется
чтобы сохранить его явно.
Существует много различных форматов чисел с плавающей запятой, и каждый из них
из них могут иметь разный уровень точности. В зависимости от формата
который используется, общий размер двоичной последовательности действительного числа и
относительный размер различных полей в этой последовательности может быть различным.
Например, как мы увидим позже в формате с плавающей запятой IEEE,
экспонента может занимать 8 бит из 32 бит (25% от общего числа
size), или 11 из 64 бит (17%), или 15 из 128 бит (12%).А
Число с плавающей запятой не нужно хранить в одной ячейке памяти.
Двоичная последовательность числа может быть разбита на несколько слов для достижения
большая точность.
Число битов, выделенных показательной части и мантиссе
часть номера полностью зависит от потребностей пользователя. Номер
бит, выделенных для экспоненты, определит диапазон чисел
что можно представить. Например, астрофизик сверху
для работы с номерами от 2 * 10 33 до 9 * 10 -28 , диапазон
из 10 61 , что означает, что ему необходимо выделить достаточно бит
для представления 61 различных значений показателя степени от -28 10 до +33 10 .
Количество битов, выделенных части мантиссы, будет определять
максимальное количество значащих цифр, которое может быть сохранено, что, в свою очередь,
определяет точность , которую может иметь число. Номер
записанное как 3.14159 более точное, чем записанное число
как 3.14. Пожалуйста, не путайте точность с точностью . Точность
— это мера правильности, а точность — мера точности.Число записывается как 3,04159
является более точным, но менее точным, чем записанное число
как 3.14 (обратите внимание на опечатку в 3. 0 4159).
- Нормализация чисел с плавающей запятой
По соглашению, числа с плавающей запятой всегда нормализованы (если только в противном случае, в этом разделе мы всегда имеем дело с двоичными числами). Однако нормализация мантиссы не имеет ничего общего с нормализация показателя степени.Нормализация экспоненты имеет даже отдельное собственное название: смещение .
Нормализация мантиссы : Есть два общепринятых способа нормализации мантисса. Один из них — всегда ограничивать мантиссу в диапазоне от 0,100 … 00 до 0,111 ….. 11. Если результат двоичной операции вида 1.xxx …. * 2 e , он будет нормализован до 0.1xxx … * 2 e + 1 , и если результат имеет вид 0.01 ….. * 2 e это будет нормализовано до 0,1 ….. * 2 e — 1 . Обратите внимание, что специальный исключение должно быть сделано для нуля, потому что оно не может быть нормализовано.
Другой приемлемый способ — ограничить мантиссы в диапазоне 1.000 … 00 до 1.111 … 11, так что число с плавающей запятой всегда выражается в форма 1.xxx ….. * 2 e .
Основным преимуществом нормализации мантиссы является повышение точности.
8-битная ненормализованная мантисса 0.00000011 имеет только 2 значащие цифры,
в то время как 8-битная нормализованная мантисса 0,11010010 имеет 8 значащих цифр.
Смещение показателя степени : В реальной жизни мы имеем дело с обоими положительными и отрицательные мантиссы, а также с отрицательными и положительными показателями. Отрицательная мантисса обычно хранится в форме дополнения до двух, но экспоненты всегда хранятся в смещенных от. Помните, что n-бит экспонента позволяет представить 2 n возможных беззнаковых экспонент значения от 0 до 2 n — 1.Если вычесть постоянное значение ( смещение ) из 2 n — 1 из каждого из этих значений без знака, мы получаем a ряд чисел от -2 n — 1 до 2 n-1 -1, то есть представляются беззнаковыми числами от 0 до 2 n — 1 . Добавление константы к самому отрицательному члену, чтобы сделать его равным нулю, есть просто еще один способ представления отрицательных чисел.
Пример:
Простая формула связывает истинное значение показателя степени с показателем хранится в компьютере:Если (в десятичной системе) мы имеем ряды -5, -4, -3, -2, -1,0,1,2,3,4 , мы можем добавить 5 к каждому из этих чисел, чтобы получить новую серию 0,1,2,3,4,5,6,7,8,9.Таким образом, мы можем использовать беззнаковые числа от 0 до 9 для представления чисел от -5 до +4, зная, что мы должны вычесть 5 из беззнакового ряда попасть в подписанный сериал.
E s — это сохраненная или смещенная экспонента, E t — это истинный показатель, а B — смещение (константа), выбранная так, чтобы B добавлялась к самый отрицательный истинный показатель всегда дает 0.Что касается нас в этом курсе B = 2 n — 1 , где n — количество выделенных бит к показателю.E s = E t + B
Пример:
В следующей таблице показано соотношение между истинным и истинным. смещенная экспонента для приведенного выше примера.При n = 3, 2 n = 8, а смещение составляет 2 n — 1 = 4. В этом случае
истинная экспонента колеблется от -4 до 3, и она будет сохранена
как смещенная экспонента от 0 до 7.0,00010111 2 нормализовано до 0.10111 * 2 -3
Истинная экспонента -3, она будет сохранена в смещенной форме -3 + 4 = 1
Истинный показатель | Смещенная экспонента | Сохраняется в двоичном формате как |
-4 | 0 | 000 |
-3 | 1 | 001 |
-2 | 2 | 010 |
-1 | 3 | 011 |
0 | 4 | 100 |
1 | 5 | 101 |
2 | 6 | 110 |
3 | 7 | 111 |
Преимущество представления экспонент в предвзятой форме состоит в том, что наиболее
отрицательное значение экспоненты всегда сохраняется как 0, так что мы можем хранить подписанные
значения как беззнаковые числа.
3.1.3 Формат с плавающей запятой IEEE
Существует несколько различных форматов хранения реальных данных в компьютерах. Мы уже видели довольно упрощенный вариант: двоичная последовательность, разделенная на два поля — экспонента и мантисса. Сейчас мы рассмотрим самое популярный формат, который используется в реальном мире: с плавающей запятой IEEE формат .
IEEE (IEEE для института инженеров электроники и электротехники) формат сам по себе разделен на три основных формата, называемых single , double и quad , каждый из которых имеет определенный уровень точности.
Число с плавающей запятой IEEE определяется следующим образом:
N = (-1) S * 1.F * 2 Eгде S — знаковый бит: 0 для положительной мантиссы, 1 для отрицательной мантиссы; F — дробная часть мантиссы; и E — смещенная экспонента. Обратите внимание, что E-bias дает вам истинную экспоненту.
Формат одинарной точности представлен следующим образом:
Число занимает всего 32 бита.Первый бит — это знаковый бит (0 <=> положительный, 1 <=> отрицательный) следующие 8 бит зарезервированы для экспонента со смещением , а оставшиеся 23 бита оставлены для дробная часть мантиссы.
Почему мы храним только дробную часть мантиссы, а не
вся мантисса? Числа с плавающей запятой IEEE нормализованы так, чтобы
их мантиссы всегда имеют целую часть, равную 1, то есть мантиссы
всегда лежат в диапазоне от 1.000 …. 00 до 1.111 …. 11 (если не указано иное
указано, мы всегда говорим о двоичных числах). Поскольку по определению
формата IEEE целая часть мантиссы всегда будет 1, там
нет необходимости хранить его явно, что позволяет сэкономить один бит. Таким образом, дробное
часть мантиссы может иметь один дополнительный значащий бит. Двойная точность
и четверная точность работают с мантиссой точно так же.
S | 8 бит для экспоненты | 23 бита для дробного часть мантиссы |
Расположение полей одинаково во всех трех форматах, т.е.е. первый идет знаковый бит, затем биты экспоненты, а затем биты мантиссы. Единственная разница между одинарной точностью, двойной точностью и четырьмя точность заключается в том, что каждый из них выделяет разное количество бит для показатель степени и мантиссы. Помните: чем больше бит выделено мантисса, тем она точнее и чем больше битов выделяется экспонента, тем больший диапазон чисел может быть представлен. Здесь особенности этих трех форматов:
Одиночный | Двойной | четырехъядерный | ||
Количество бит, принимаемых: | ||||
Знак | 1 | 1 | 1 | |
Показатель степени | 8 | 11 | 15 | |
Дробная мантисса | 23 | 52 | 111 | |
Всего | 32 | 64 | 128 | |
Показатель степени: | ||||
Смещение | 127 | 1023 | 16383 | |
Диапазон (смещенной) экспоненты: | 0..255 | 0..2047 | 0..32767 |
Во всех трех форматах минимальный показатель степени (т.е. 0) вместе с мантиссой = 0 (как целая, так и дробная часть равны 0) используется для представления знаковый ноль, в то время как максимальный показатель используется для представления плюса или минуса бесконечность, или NaN . NaN означает не число. Также обратите внимание, что поскольку В формате IEEE используется знаковый бит, нет необходимости в арифметике с дополнением до двух. здесь.
Пришло время для примера.
Пример:
Представляет -69,125 10 дюймов a) формат IEEE одинарной точностиРешение : а) 69,125 10 = 1000101. 001 2 |
ПОЕЗДКА:
Нажмите здесь, чтобы посетить
замечательная страница, которая конвертирует для вас числа IEEE в десятичную форму и
наоборот, и подробно показывает, как декомпозируется номер IEEE.
Настоятельно рекомендуется.
3,2 АРИФМЕТИКА ПЛАВАЮЩЕЙ ТОЧКИ
Арифметика с плавающей запятой немного сложнее, чем целочисленная
и арифметика с фиксированной точкой.
Рассмотрим сложение двух вещественных десятичных чисел. как числа с фиксированной запятой:
1234,00
+
56,78
_______
1290,78
Теперь, если мы попытаемся сложить те же числа, записанные в нотации с плавающей запятой, мы видим, что простое добавление мантисс не имеет смысла, если экспоненты равны:
0,1234 * 10 4
+
0.5678 * 10 2
___________
???????
Таким образом, перед сложением / вычитанием необходимо выполнить следующие шаги. два числа с плавающей запятой:
1. Уравняйте показатели двух чисел на делая меньший показатель равным большему и деление мантиссы меньшего числа на тот же коэффициент, на который его показатель увеличился, чтобы сохранить фактическое значение числа.
2. Сложить / вычесть мантиссы.
3. При необходимости повторно нормализовать результат (это
называется после нормализации ).
a * 2 A + b * 2 B = a * 2 A-B * 2 B + b * 2 B = (a * 2 A-B + b) * 2 B |
Мы применяем эти шаги к приведенному выше примеру:
1.0,1234 * 10 4 + 0,5678
* 10 2 = 0,1234 * 10 4 + 0,005678 * 10 4
2. 0,1234 * 10 4 + 0,005678
* 10 4 = 0,129078 * 10 4
3. В этом примере результат уже нормализован.
Обратите внимание, что результат операции имеет большую точность, чем два операнда: результат имеет мантиссу с семью значащими цифрами, в то время как операнды имеют мантиссу с 5 значащими цифрами.Результат переполнено , и поскольку компьютеры работают с мантиссой фиксированного длины (в данном случае пять цифр), необходимо что-то сделать, чтобы результат до пяти значащих цифр. Действия, которые необходимо предпринять, могут быть либо усечение (просто отбрасывание ненужных цифр), либо округление. Округление является более точным, чем усечение, и приводит к несмещенной ошибке, т.е. результат иногда переоценивается, иногда недооценивается, в то время как усечение всегда занижает результат.Однако усечение — это много проще в реализации, чем округление.
При умножении двух чисел с плавающей запятой выполните следующие действия.
шаги:
1. Сложите экспоненты.
2. Умножьте мантиссы (как числа без знака).
3. Подобные знаки дают положительный результат, разные знаки
дают отрицательный результат.
(a * 2 A ) * (b * 2 B ) = (a * b) * 2 A * 2 B = (а * б) * 2 А + В |
При выполнении арифметики с плавающей запятой всегда следует учитывать Обратите внимание на следующие факты:
1.Поскольку в целом показатель степени и мантисса разделяют одно и то же слово, часто необходимо распаковать их, т.е. разделите их, прежде чем проводить с ними операции. Например, с формат IEEE, экспонента и мантисса упакованы вместе в 32-битное слово, чтобы минимизировать объем памяти, когда они хранятся в памяти. Когда номер распаковывается для участия в операции, формат называется расширенный . Ведущий 1 вставлен спереди 23-битной дробной мантиссы, что приводит к 24-битной мантиссе, а затем мантисса расширяется до 32 бит.В таком компьютере, как 68000, где слова имеют 16 бит, мантисса расширяется, чтобы занимать два полных слова, что значительно увеличивает его точность. Все расчеты производятся с расширенная 32-битная мантисса. После того, как «номер выполнил свою работу», его упаковывается в исходный формат и сохраняется в памяти.
2. Если два показателя различаются более чем на m + 1, где m — количество значащих бит мантиссы, нет указывает на добавление или вычитание этих двух чисел, потому что меньшее число слишком мало, чтобы существенно повлиять на большее число.Там есть нет смысла добавлять 0,123987 * 10 3 к 0,112233 * 10 41 потому что это добавление не повлияет на мантиссу из 6 цифр. Конец результат будет фактически равен большему операнду.
3. Если показатель степени результата операции равен
больше максимально возможного значения или меньше минимально возможного
значение, мы имеем случай переполнения экспоненты или истощения экспоненты ,
соответственно.Эти два случая представляют собой условия, выходящие за пределы допустимого диапазона, потому что
в каждом случае число выходит за пределы диапазона чисел, которые компьютер может
ручка. В случае истощения показателя степени, число, как правило, делается равным
к нулю, а переполнение экспоненты в целом приводит к ошибке, требующей
специальные меры.
3,3 ЛОГИЧЕСКИЕ ОПЕРАЦИИ НАД ДВОИЧНЫМИ ЧИСЛАМИ
Логические операции, которые мы рассматриваем в этом курсе, — это И , OR , EOR и НЕ .Их называют «логическими», потому что
они считают 1 истинным и 0 ложным (это принятое
соглашению, но нет причин, по которым 0 нельзя назвать истинным, а 1 ложным) . Эти операции по существу побитовые, т.е. они выполняются бит
по битам. Операция НЕ — единственная, которая принимает один операнд.
вместо двух. Остальные операции выполняются между парами соответствующих
биты в двух операндах. Позже мы увидим, что процессор Motorola 68000
имеет специальные инструкции, которые выполняют эти операции.
а | б | а И б |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Как видите, И b равно 1 тогда и только тогда, когда и a, и b 1.
Когда логическая операция применяется к двум словам по n бит каждое, операция выполняется между соответствующими парами битов. Например, если у нас есть abcd И wxyz , Результат мноп где p = d И z , o = c И y , n = b И x , м = a И Вт .
Пример:
А = 01011001Вы можете видеть, что биты в результате устанавливаются в 1 только тогда, когда два соответствующие биты в операндах установлены на 1. Это означает, что И оператор действует как селективная маска . Если вы хотите, чтобы замаскировали , или очистить (установить в 0), 4 старших бита A и оставить другие биты A неизменны, просто AND A с числом B = 00001111, которое имеет его 4 старших бита установлены в 0, остальные биты в 1.
B = 00001111
А И В = С = 00001001
Результат операции ИЛИ b ложно тогда и только тогда, когда оба а и б ложны. Верно, когда оба оператора верны, или когда только один из их правда. Вот таблица истинности для операции OR :
а | б | a OR b |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Как видите, достаточно, чтобы один операнд был истинным для всего выражения быть правдой.Операция ИЛИ двух слов по n бит в каждом выполняется аналогично объединение двух слов с помощью И, с той лишь разницей, что это другая таблица истинности.
Пример:
А = 01011001Вы можете видеть, что биты в результате устанавливаются в ноль только тогда, когда два соответствующие биты в операндах устанавливаются в ноль. Это означает, что Оператор OR может использоваться для выборочной установки бит (для 1).Если вы хотите установить в 1 все 4 младших бита A и оставьте остальные биты неизменными, просто ИЛИ A с числом B = 00001111, которое имеет 4 младших бита, равных 1, а остальные биты — 0. В некоторых случаях оператор OR может рассматриваться как обратный оператора И .
B = 00001111
A ИЛИ B = C = 01011111
EOR или E xclusive OR , работа аналогична операция ИЛИ , за исключением того, что результат истинен тогда и только тогда, когда только один из операндов верен.Ложно, если оба операнда верны, или когда оба операнда ложны. Вот таблица истинности для операции EOR:
а | б | a EOR b |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Другими словами, операция EOR выбирает для другой вход .
Пример:
А = 01011001Этот пример показывает, что операцию EOR можно использовать для выборочного переключения (изменить состояние) бит. Если вы хотите инвертировать 4 младших бита A и оставьте другие его биты без изменений, просто EOR A с B = 00001111. Примечание. что если мы пренебрегаем любыми битами переноса, операция EOR идентична добавление.
B = 00001111
A EOR B = C = 01010110
Операция НЕ является самой простой из четырех. Достаточно одного операнд и просто инвертирует или дополняет его биты. Вот правда таблица для работы НЕ :
Пример:
А = 1010011 НЕ A = 0101100 = дополнение AОбратите внимание, что два дополнения к N можно определить как НЕ (N) + 1.
3.4 РЕЗЮМЕ
- Как правило, компьютеры хранят действительные числа в формате с плавающей запятой.
- В представлении с фиксированной точкой выделяется фиксированное количество битов. для целой части и для дробной части действительного числа, и предполагается, что точка счисления находится между ними.
- Поскольку известно, где предположительно находится точка счисления, компьютер не нужно хранить его явно, и числа с фиксированной точкой можно обрабатывать внутренне точно так же, как целые числа.Целочисленная арифметика идентична фиксированной точечная арифметика, все, что нужно сделать, это отслеживать местоположение десятичной точки.
- Преимущество представления с фиксированной точкой в том, что оно не требует сложных аппаратное или программное обеспечение. Его недостаток в том, что он работает очень неэффективно. с точки зрения места для хранения с очень большими и очень маленькими номерами. Его использование поэтому следует ограничиваться небольшими диапазонами действительных чисел.
- Числа с плавающей запятой представлены в виде m * r e , где м — это мантисса , r — это основание или с основанием , а e — это показатель степени .Числа с плавающей запятой хранятся в компьютерах в виде двоичных последовательностей, разделенных на разные поля, одно поле хранит мантиссу, другое — показатель степени и т. д. Основание системы счисления понимается и не сохраняется явно. В зависимости от формата, который используется общий размер двоичной последовательности действительного числа и относительный размер различных полей в этой последовательности может быть различным.
- Количество битов, выделенных экспонентной части и мантиссе. Количество полностью зависит от потребностей пользователя.Количество биты, выделенные экспоненте, будут определять диапазон чисел что можно представить. Количество бит, выделенных мантиссе, будет определить максимальное количество значащих цифр, которое может быть сохранено, что, в свою очередь, определяет точность , которую может иметь число.
- По соглашению числа с плавающей запятой всегда нормализованы.
- Есть два общепринятых способа нормализации мантиссы.Один из них — всегда ограничивайте мантиссу в диапазоне от 0,100 … 00 до 0,111 ….. 11 соответствующим образом регулируя показатель степени. Другой приемлемый способ — ограничить мантисса в диапазоне от 1.000 … 00 до 1.111 … 11, снова путем регулировки соответственно показатель степени.
- Нормализация показателя степени называется смещением.
- N-битовый показатель степени может представлять 2 n различных значений показателя степени. Прежде чем оно будет сохранено в компьютере, истинное значение экспоненты к нему добавляется константа или смещение, и именно этот новый смещенный показатель хранится.Величина смещения выбирается так, чтобы максимально отрицательная значение истинной экспоненты может быть сохранено в компьютере как 0. Предвзятость выбирается так, чтобы истинные значения n-битной экспоненты варьировались от -2 n-1 до 2 n-1 — 1, могут быть представлены внутри с серией беззнаковых чисел от 0 до 2 n — 1.
- Формула, связывающая истинное значение показателя степени с показателем степени в компьютере хранится:
E s = E t + B
, где E s — это сохраненная или смещенная экспонента, E t — истинный показатель степени, а B — смещение (константа).
- Самый популярный формат для хранения реальных данных в компьютерах сегодня — Формат с плавающей запятой IEEE . Сам он разделен на три основных формата: называется single , double и quad , каждый из них имеющий определенный уровень точности.
- Число с плавающей запятой IEEE определяется как:
N = (-1) S * 1.F * 2 E
где S — знаковый бит: 0 для положительной мантиссы, 1 для отрицательной мантисса; F — дробная часть мантиссы; и E — смещенный экспонента.E — bias дает вам истинную экспоненту.
- Двоичная последовательность числа с плавающей запятой IEEE делится на 3 поля: первое поле размером один бит хранит знаковый бит, следующее поле, размер которого варьируется от одного уровня точности к другому, хранит смещенные экспонента, а остальные биты составляют третье поле, в котором хранится дробная часть мантиссы. Перед хранением мантиссу нормализуют. так что он всегда находится в диапазоне от 1.000 … 000 до 1.111 … 111, и ведущая 1 не сохраняется, потому что она понятна. Показатель степени имеет должны быть скорректированы соответствующим образом. В следующей таблице перечислены функции. из трех основных форматов IEEE:
Одинарный | Двойной | Четырехъядерный | ||
Количество бит, принимаемых: | ||||
Знак | 1 | 1 | 1 | |
Показатель степени | 8 | 11 | 15 | |
Дробная мантисса | 23 | 52 | 111 | |
Всего | 32 | 64 | 128 | |
Показатель степени: | ||||
Смещение | 127 | 1023 | 16383 | |
Диапазон (смещенной) экспоненты: | 0..255 | 0..2047 | 0..32767 |
- Следующие шаги должны быть выполнены перед сложением / вычитанием двух числа с плавающей запятой:
1. Уравняйте показатели двух чисел на
делая меньший показатель равным большему и деля
мантисса меньшего числа на тот же коэффициент, на который его показатель степени
был увеличен, чтобы сохранить фактическое значение числа.
2. Сложить / вычесть мантиссы.
3. При необходимости повторно нормализовать результат (это называется постнормализацией).
- Если в результате арифметической операции с плавающей запятой происходит переполнение, т.е. если у него есть более значимые биты, которые можно сохранить, он должен быть либо усеченный, или, что более предпочтительно, округлый.
- При умножении двух чисел с плавающей запятой выполните следующие действия:
- 1.Добавьте экспоненты.
- Поскольку в целом показатель степени и мантисса упакованы или «сжаты» в одном и том же слове часто бывает необходимо распаковать, т.е. разделить их, а затем расширить их, то есть увеличить зарезервированное пространство для хранения для них, перед проведением на них операций.После необходимых операций были выполнены (всегда на расширенных числах), показатель степени и мантиссы упаковываются в их основной формат перед хранением.
2. Умножьте мантиссы (как числа без знака).
3. Подобные знаки дают положительный результат, разные знаки дают отрицательный результат.
- Если показатели двух чисел отличаются более чем на m + 1, где m — это количество значащих бит мантиссы, добавлять нет смысла или вычитая эти два числа, потому что меньшее число слишком мало чтобы существенно повлиять на большее число.
- Если показатель результата операции больше максимального возможное значение или меньше минимального
возможное значение, есть случай переполнения экспоненты или истощения экспоненты, соответственно.
- 4 основные логические операции, которые выполняются с двоичными значениями: И , OR , EOR и НЕ . Их называют «логическими», потому что они считают 1 истинным, а 0 — ложным. Эти операции являются побитовыми, т.е. они выполняются между соответствующими парами битов.
- Результат выражения a AND b истинен тогда и только тогда, когда оба а и б верны. В противном случае это ложь.Вот таблица истинности для И операция:
а | б | а И б |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Операция AND может использоваться для выборочной очистки (установки в 0) битов.
- Результат операции a OR b ложен тогда и только тогда, когда и a, и b ложны. Верно, когда оба оператора верны, или когда только один из их правда. Вот таблица истинности для операции ИЛИ:
а | б | a OR b |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Операция ИЛИ может использоваться для выборочной установки (установки в 1) битов.
- Операция EOR или Exclusive OR дает истинный результат тогда и только тогда, когда только один из операндов верен. Ложно, если оба операнда верны, или когда оба операнда ложны. Вот таблица истинности для операции EOR:
а | б | a EOR b |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Операция EOR может использоваться для выборочного переключения (изменения состояния) битов.
- Операция НЕ принимает единственный операнд и просто инвертирует его биты. В таблица истинности для операции НЕ:
Если вы хотите сделать несколько упражнений, вот немного контрольный опрос.
Авторские права © Университет Макгилла, 1998. Все права защищены.
Воспроизведение этого произведения полностью или частично разрешено в образовательных целях. или в исследовательских целях при условии, что это уведомление об авторских правах включено в любая копия.
Вещественные числа — Представление данных — Высшая редакция вычислительной науки
Вещественные числа — это числа, которые включают дроби / значения после десятичной точки.
Например, 123,75 — действительное число. Этот тип числа также известен как число с плавающей запятой .
Все числа с плавающей запятой хранятся компьютерной системой с использованием мантиссы и показателя степени .
Следующий пример используется для иллюстрации роли мантиссы и экспоненты.Он не полностью отражает компьютерный метод хранения действительных чисел, но дает общее представление.
Число 123,75 может быть представлено с использованием математической научной записи как:
1,2375 x 10 2 = 123,75
Умножение числа на десять в степени двойки (10 2 ) перемещает значения на две позиции вверх (или десятичная точка вниз на два разряда), так что число 123 находится перед десятичной точкой, а число 75 теперь идет сразу после десятичной точки.В этом примере мантисса равна 1,2375, а показатель степени — 2. Обычно это можно представить как:
MX 10 E
Чтобы представить то же значение в двоичном формате, примените следующие правила:
Представьте число 123.75 как:
64 | 32 | 16 | 8 | 4 | 15 | 0,25 | ||
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 |
0 | 0 |
1 | 1 |
2 | 10 |
5 | 101 |
16 | 10000 |
40 | 101000 |
53 | 110101 |
389 | 110000101 |
3750 | 111010100110 |
Если \ (n \) четно, то наименее значащая цифра двоичного представления \ (n \) равна \ (0 \), а если \ (n \) нечетно, то эта цифра равна \ ( 1 \). n \).
Значение представлений (обсуждение)
Для нас естественно думать о \ (236 \) как о «действительном» числе, а о \ (11101100 \) как о «просто» его представлении. Однако для большинства европейцев в средние века CCXXXVI
было бы «действительным» числом, а \ (236 \) (если бы они даже слышали о нем) было бы странным индо-арабским позиционным представлением. 1 Когда наши AI-роботы-повелители материализуются, они, вероятно, будут думать о \ (11101100 \) как о «фактическом» числе, а о \ (236 \) как о «просто» представлении, которое им нужно использовать, когда они дают команды людям. .
Так что же такое «настоящий» номер? Это вопрос, над которым философы математики размышляли на протяжении всей истории. Платон утверждал, что математические объекты существуют в некоторой идеальной сфере существования (которая в определенной степени более «реальна», чем мир, который мы воспринимаем нашими чувствами, поскольку этот последний мир является просто тенью этой идеальной сферы). В видении Платона символы \ (236 \) — это просто обозначение некоего идеального объекта, который, в знак уважения к покойному музыканту, мы можем назвать «числом, обычно представляемым \ (236 \)».
Австрийский философ Людвиг Витгенштейн, с другой стороны, утверждал, что математических объектов не существует вообще, а существуют только фактические отметки на бумаге, составляющие \ (236 \), \ (11101100 \) или . ССХХХVI
. По мнению Витгенштейна, математика — это всего лишь формальное манипулирование символами, не имеющими внутреннего значения. Вы можете думать о «фактическом» числе как о (несколько рекурсивно) «то, что является общим для \ (236 \), \ (11101100 \) и CCXXXVI
и всех других прошлых и будущих репрезентаций, которые предназначены для объект».
Читая эту книгу, вы можете выбрать свою собственную философию математики, если вы сохраняете различие между самими математическими объектами и различными конкретными вариантами их представления, будь то в виде чернильных пятен, пикселей на экране или нулей. и единицы, или в любой другой форме.
Представления за пределами натуральных чисел
Мы видели, что натуральные числа могут быть представлены в виде двоичных строк. Теперь мы покажем, что то же самое верно и для других типов объектов, включая (потенциально отрицательные) целые числа, рациональные числа, векторы, списки, графики и многие другие.Во многих случаях выбор «правильного» строкового представления для фрагмента данных весьма нетривиален, а поиск «наилучшего» (например, наиболее компактного, точного, наиболее эффективно управляемого, устойчивого к ошибкам, наиболее информативных функций, и др.) является объектом интенсивных исследований. Но пока мы сосредоточимся на представлении некоторых простых представлений для различных объектов, которые мы хотели бы использовать в качестве входных и выходных данных для вычислений.
Поскольку мы можем представить натуральные числа в виде строк, мы можем представить полный набор из целых чисел (т.е.*\) следующее
\ [ZtS (m) = \ begin {case} 0 \; NtS (m) & m \ geq 0 \\ 1 \; NtS (-m) & m <0 \ end {ases} \]
, где \ (NtS \) определяется, как в уравнении 2.1.Хотя функция кодирования представления должна быть взаимно однозначной, она не обязательно должна быть на . Например, в приведенном выше представлении нет числа, которое представлено пустой строкой, но это все равно хорошее представление, поскольку каждое целое число уникально представлено некоторой строкой.
Представление с дополнением до двух (необязательно)
Раздел 2.{п + 1} \). Слева: это представление для \ (n = 3 \) (красные целые числа — это числа, представленные синими двоичными строками). Если микропроцессор не проверяет переполнение, сложение двух положительных чисел \ (6 \) и \ (5 \) может привести к отрицательному числу \ (- 5 \) (поскольку \ (- 5 \ mod 16 = 11 \) Правая часть — это программа C
, которая в некоторой \ (32 \) архитектуре будет печатать отрицательное число после добавления двух положительных чисел. (Целочисленное переполнение в C
считается неопределенным поведением , что означает результат работы этой программы, включая то, запускается она или дает сбой, может различаться в зависимости от архитектуры, компилятора и даже его параметров и версии.)
Рациональные числа и представляющие пары строк
Мы можем представить рациональное число в форме \ (a / b \), представив два числа \ (a \) и \ (b \). Однако простое объединение представлений \ (a \) и \ (b \) не сработает. Например, двоичное представление \ (4 \) — это \ (100 \), а двоичное представление \ (43 \) — \ (101011 \), но конкатенация \ (100101011 \) этих строк также является конкатенацией представления \ (10010 \) числа \ (18 \) и представления \ (1011 \) числа \ (11 \).Следовательно, если бы мы использовали такую простую конкатенацию, мы не смогли бы сказать, должна ли строка \ (100101011 \) представлять \ (4/43 \) или \ (18/11 \).
Мы решаем эту проблему, давая общее представление для пар строк . * \)).* \).
Наше окончательное представление для рациональных чисел получается путем составления следующих шагов:
Представление неотрицательного рационального числа в виде пары натуральных чисел.
Представление натурального числа строкой через двоичное представление.
Объединение 1 и 2 для получения представления рационального числа в виде пары строк.
Представление пары строк над \ (\ {0,1 \} \) как одной строки над \ (\ Sigma = \ {0,1, \ | \} \).
Представление строки над \ (\ Sigma \) как более длинной строки над \ (\ {0,1 \} \).
Рассмотрим рациональное число \ (r = -5 / 8 \). Мы представляем \ (- 5 \) как \ (1101 \) и \ (+ 8 \) как \ (01000 \), и поэтому мы можем представить \ (r \) как пару строк \ ((1101, 01000) \) и представьте эту пару как строку длины \ (10 \) \ (1101 \ | 01000 \) по алфавиту \ (\ {0,1, \ | \} \). Теперь, применив карту \ (0 \ mapsto 00 \), \ (1 \ mapsto 11 \), \ (\ | \ mapsto 01 \), мы можем представить последнюю строку как строку длины \ (20 \) \ ( s = 11110011010011000000 \) по алфавиту \ (\ {0,1 \} \).
Та же идея может быть использована для представления троек строк, четверок и т. Д. В виде строки. Действительно, это один из примеров очень общего принципа, который мы снова и снова используем как в теории, так и в практике информатики (например, в объектно-ориентированном программировании):
Если мы можем представить объекты типа \ (T \) как строки, то мы можем также представить кортежи объектов типа \ (T \) как строки.
Повторяя ту же идею, как только мы можем представить объекты типа \ (T \), мы также можем представить списков списков, таких объектов и даже списки списков списков и так далее, и тому подобное.Мы вернемся к этому моменту, когда обсудим кодировку без префикса в Разделе 2.5.2.
Представление действительных чисел
Набор из действительных чисел \ (\ R \) содержит все числа, включая положительные, отрицательные и дробные, а также иррациональных чисел , таких как \ (\ pi \) или \ (e \). {e} \) ближе всего к \ (x \).e \) для \ (b, e \). Это называется «с плавающей запятой», потому что мы можем думать о числе \ (b \) как о последовательности двоичных цифр, а о \ (e \) как о расположении «двоичной точки» в этой последовательности. Использование плавающего представления является причиной того, почему во многих системах программирования печать выражения 0,1 + 0,2
приводит к 0,30000000000000004
, а не 0,3
, подробнее см. Здесь, здесь и здесь.
Читатель может (справедливо) обеспокоиться тем фактом, что представление с плавающей запятой (или рациональное число один) может только приблизительно представлять действительные числа. Во многих (хотя и не во всех) вычислительных приложениях можно сделать точность достаточно высокой, чтобы это не повлияло на конечный результат, хотя иногда нам нужно быть осторожными. Действительно, ошибки с плавающей запятой иногда не могут быть предметом для шуток. Например, ошибки округления с плавающей запятой были причастны к отказу U.Ракета S. Patriot для перехвата иракской ракеты Скад, унесшая жизни 28 человек, а также ошибка в 100 миллионов фунтов стерлингов при вычислении выплат британским пенсионерам.
Теорема Кантора, счетные множества и строковые представления действительных чисел
«Для любого сбора фруктов мы можем приготовить больше фруктовых салатов, чем фруктов. В противном случае мы могли бы обозначить каждый салат разными фруктами и рассмотреть салат из всех фруктов, которых нет в их салате. Этикетка этого салата есть в нем тогда и только тогда, когда его нет.* \). Представление о том, что существуют «оттенки бесконечности», глубоко беспокоило математиков и философов в то время. Философ Людвиг Витгенштейн (о котором мы упоминали ранее) назвал результаты Кантора «полнейшей чепухой» и «смехотворной». Другие думали, что они еще хуже. Леопольд Кронекер назвал Кантора «развратником молодежи», а Анри Пуанкаре сказал, что идеи Кантора «должны быть изгнаны из математики раз и навсегда». \ infty \).* \) (со строками, отсортированными в лексикографическом порядке) и содержит последовательность \ (StF (x) (0), StF (x) (1), StF (x) (2), \ ldots \). Элементы диагонали и в этой таблице имеют значения
.\ [StF (\ suremath {\ text {\ texttt {«»}}}) (0), StF (0) (1), StF (1) (2), StF (00) (3), StF ( 01) (4), \ ldots \]
, которые соответствуют элементам \ (StF (x_n) (n) \) в \ (n \) — й строке и \ (n \) —м столбце этой таблицы для \ (n = 0,1,2, \ ldots \). Функция \ (\ overline {d} \), которую мы определили выше, отображает каждое \ (n \ in \ N \) в отрицание \ (n \) — го диагонального значения.* \) — некоторая строка, и пусть \ (g = StF (x) \). Если \ (n \) — позиция \ (x \) в лексикографическом порядке, то по построению \ (\ overline {d} (n) = 1-g (n) \ neq g (n) \), что означает, что \ (g \ neq \ overline {d} \), что мы и хотели доказать.
Чтобы завершить доказательство теоремы 2.5, нам нужно показать лемму 2.9. Это требует некоторого опыта в области вычислений, но в остальном все просто. Если у вас раньше не было большого опыта работы с ограничениями реального ряда, то формальное доказательство, приведенное ниже, может быть трудновыполнимо.\ infty \), то должен быть какой-то ввод \ (k \), с которым они не согласны. Если взять такой минимум \ (k \), то числа \ (f (0) .f (1) f (2) \ ldots f (k-1) f (k) \ ldots \) и \ (g (0). G (1) g (2) \ ldots g (k) \ ldots \) согласуются друг с другом вплоть до \ (k-1 \) — й цифры после десятичной точки, и не согласны по \ (k \) — я цифра. Но тогда эти числа должны быть разными. Конкретно, если \ (f (k) = 1 \) и \ (g (k) = 0 \), то первое число больше второго, а в противном случае (\ (f (k) = 0 \) и \ ( g (k) = 1 \)) первое число меньше второго.\ infty \). Поскольку \ (f \) и \ (g \) различны, должен быть некоторый вход, на котором они различаются, и мы определяем \ (k \) как наименьший такой вход и предполагаем без ограничения общности, что \ (f ( к) = 0 \) и \ (g (k) = 1 \). (В противном случае, если \ (f (k) = 1 \) и \ (g (k) = 0 \), то мы можем просто поменять ролями \ (f \) и \ (g \). * \) до \ (S \).* \).
Существует отображение на некотором счетном множестве \ (T \) в \ (S \).
Существует взаимно однозначное отображение \ (S \) в некоторое счетное множество \ (T \).
Убедитесь, что вы знаете, как доказать эквивалентность всех приведенных выше результатов.
Представление объектов помимо чисел
Числа, конечно, ни в коем случае не единственные объекты, которые мы можем представить в виде двоичных строк. Схема представления для представления объектов из некоторого набора \ (\ mathcal {O} \) состоит из функции кодирования , которая отображает объект в \ (\ mathcal {O} \) в строку, и декодирования функция, которая декодирует строку обратно в объект в \ (\ mathcal {O} \).* \ rightarrow_p \ mathcal {O} \) является (возможно, частичной) функцией и такая, что \ (D \) и \ (E \) удовлетворяют тому, что \ (D (E (o)) = o \) для каждого \ (о \ ин \ mathcal {O} \). \ (E \) известна как функция кодирования , а \ (D \) известна как функция декодирования .
Обратите внимание, что условие \ (D (E (o)) = o \) для каждого \ (o \ in \ mathcal {O} \) подразумевает, что \ (D \) равно на (вы понимаете, почему?) . Оказывается, что для построения схемы представления нам нужно всего лишь найти функцию , кодирующую .* \), существует либо ноль, либо единственный \ (o \ in \ mathcal {O} \) такой, что \ (E (o) = x \) (иначе \ (E \) не было бы взаимно однозначным ). Мы определим \ (D (x) \) равным \ (o_0 \) в первом случае и этот единственный объект \ (o \) во втором случае. По определению \ (D (E (o)) = o \) для каждого \ (o \ in \ mathcal {O} \).
Конечные представления
Если \ (\ mathcal {O} \) равно конечному , то мы можем представить каждый объект в \ (\ mathcal {O} \) в виде строки длиной не более некоторого числа \ (n \). Какое значение имеет \ (n \)? Обозначим через \ (\ {0,1 \} ^ {\ leq n} \) множество \ (\ {x \ in \ {0,1 \} ^ *: | x | \ leq n \} \) строк длиной не более \ (n \).{n + 1} -1 \), как следует из следующей леммы:
Для любых двух непустых конечных множеств \ (S, T \) существует взаимно однозначное \ (E: S \ rightarrow T \) тогда и только тогда, когда \ (| S | \ leq | T | \ ).
Пусть \ (k = | S | \) и \ (m = | T | \), и поэтому запишем элементы \ (S \) и \ (T \) как \ (S = \ {s_0, s_1, \ ldots, s_ {k-1} \} \) и \ (T = \ {t_0, t_1, \ ldots, t_ {m-1} \} \). Нам нужно показать, что существует взаимно однозначная функция \ (E: S \ rightarrow T \) тогда и только тогда, когда \ (k \ leq m \). Для направления «если», если \ (k \ leq m \), мы можем просто определить \ (E (s_i) = t_i \) для каждого \ (i \ in [k] \).Ясно, что для \ (i \ neq j \), \ (t_i = E (s_i) \ neq E (s_j) = t_j \), и, следовательно, эта функция взаимно однозначна. С другой стороны, предположим, что \ (k> m \) и \ (E: S \ rightarrow T \) — некоторая функция. Тогда \ (E \) не может быть взаимно однозначным. Действительно, для \ (i = 0,1, \ ldots, m-1 \) отметим элемент \ (t_j = E (s_i) \) в \ (T \). Если \ (t_j \) был отмечен ранее, то мы нашли два объекта в \ (S \), отображающих один и тот же элемент \ (t_j \). В противном случае, поскольку \ (T \) имеет \ (m \) элементов, когда мы добираемся до \ (i = m-1 \), мы отмечаем все объекты в \ (T \).Следовательно, в этом случае \ (E (s_m) \) должен отображаться на элемент, который уже был отмечен ранее. (Это наблюдение иногда называют «принципом голубиной норы»: принцип, согласно которому если у вас есть голубятня с \ (m \) отверстиями и \ (k> m \) голубями, то в одной норе должно быть два голубя. .)
Кодировка без префиксов
При показе схемы представления рациональных чисел мы использовали «хитрость» кодирования алфавита \ (\ {0,1, \ | \} \) для представления кортежей строк как одной строки.Это частный случай общей парадигмы кодирования без префиксов . Идея заключается в следующем: если наше представление имеет свойство, что никакая строка \ (x \), представляющая объект \ (o \), не является префиксом (т.е. начальной подстрокой) строки \ (y \), представляющей другой объект \ (o ‘\), то мы можем представить список объектов, просто объединив представления всех членов списка. Например, поскольку в английском языке каждое предложение заканчивается знаком препинания, например точкой, восклицательным знаком или вопросительным знаком, ни одно предложение не может быть префиксом другого, и поэтому мы можем представить список предложений, просто соединяя предложения одно за другим. .(Английский язык имеет некоторые сложности, такие как точки, используемые для сокращений (например, «например») или цитаты в предложениях, содержащие знаки препинания, но точка высокого уровня представления предложений без префиксов по-прежнему сохраняется.)
Оказывается, мы можем преобразовать каждое представление в форму без префиксов. Это оправдывает Большую идею 1 и позволяет нам преобразовать схему представления для объектов типа \ (T \) в схему представления списков объектов типа \ (T \).* \), определим
\ [ \ overline {E} (o_0, \ ldots, o_ {k-1}) = E (o_0) E (o_1) \ cdots E (o_ {k-1}) \ ;. \]
Теорема 2.18 — это пример теоремы, которую немного сложно разобрать, но на самом деле ее довольно просто доказать, если вы поймете, что она означает. Поэтому я настоятельно рекомендую вам остановиться здесь, чтобы убедиться, что вы поняли формулировку этой теоремы. Вы также должны попытаться доказать это самостоятельно, прежде чем продолжить.
2.9: Если у нас есть представление каждого объекта без префиксов, мы можем объединить представления объектов \ (k \), чтобы получить представление для кортежа \ ((o_0, \ ldots, o_ {k-1}) \) .Идея доказательства проста. Предположим, что, например, мы хотим декодировать тройку \ ((o_0, o_1, o_2) \) из ее представления \ (x = \ overline {E} (o_0, o_1, o_2) = E (o_0) E (o_1) E (о_2) \). Мы сделаем это, сначала найдя первый префикс \ (x_0 \) для \ (x \), который является представлением некоторого объекта. Затем мы декодируем этот объект, удалим \ (x_0 \) из \ (x \), чтобы получить новую строку \ (x ‘\), и продолжим дальше, чтобы найти первый префикс \ (x_1 \) из \ (x’ \ ) и так далее (см. упражнение 2.9). Свойство без префикса \ (E \) гарантирует, что \ (x_0 \) будет фактически \ (E (o_0) \), \ (x_1 \) будет \ (E (o_1) \) и т. Д.
Приведем формальное доказательство. Предположим, для противодействия, что существуют два различных кортежа \ ((o_0, \ ldots, o_ {k-1}) \) и \ ((o’_0, \ ldots, o ‘_ {k’-1 }) \) такая, что
\ [ \ overline {E} (o_0, \ ldots, o_ {k-1}) = \ overline {E} (o’_0, \ ldots, o ‘_ {k’-1}) \ ;. \; \; (2.4) \] Обозначим строку \ (\ overline {E} (o_0, \ ldots, o_ {k-1}) \) через \ (\ overline {x} \).
Пусть \ (i \) будет первым индексом, таким что \ (o_i \ neq o’_i \). (Если \ (o_i = o’_i \) для всех \ (i \), то, поскольку мы предполагаем, что два кортежа различны, один из них должен быть больше другого.В этом случае мы предполагаем без ограничения общности, что \ (k ‘> k \), и пусть \ (i = k \).) В случае, \ (i
\ [ \ overline {x} = \ overline {E} (o_0, \ ldots, o_ {k-1}) = x_0 \ cdots x_ {i-1} E (o_i) E (o_ {i + 1}) \ cdots E (o_ {k-1}) \]
и
\ [ \ overline {x} = \ overline {E} (o’_0, \ ldots, o ‘_ {k’-1}) = x_0 \ cdots x_ {i-1} E (o’_i) E (o’_ {я + 1}) \ cdots E (o ‘_ {k’-1}) \]
, где \ (x_j = E (o_j) = E (o’_j) \) для всех \ (j
В случае, когда \ (i = k \) и \ (k ‘> k \), получаем противоречие следующим образом. В данном случае
\ [\ overline {x} = E (o_0) \ cdots E (o_ {k-1}) = E (o_0) \ cdots E (o_ {k-1}) E (o’_k) \ cdots E ( o ‘_ {k’-1}) \]
, что означает, что \ (E (o’_k) \ cdots E (o ‘_ {k’-1}) \) должен соответствовать пустой строке \ (\ text {\ suremath {\ text {\ texttt {«» }}}} \).* \) быть взаимно однозначной функцией. Тогда существует взаимно однозначное кодирование без префиксов \ (\ overline {E} \) такое, что \ (| \ overline {E} (o) | \ leq 2 | E (o) | +2 \) для каждые \ (o \ in \ mathcal {O} \).
Для полноты изложения мы включим доказательство ниже, но было бы неплохо сделать здесь паузу и попытаться доказать его самостоятельно, используя ту же технику, которую мы использовали для представления рациональных чисел.
Идея доказательства состоит в том, чтобы использовать карту \ (0 \ mapsto 00 \), \ (1 \ mapsto 11 \), чтобы «удвоить» каждый бит в строке \ (x \), а затем отметить конец строки присоединив к нему пару \ (01 \).* \) путем определения \ (\ overline {E} (o) = \ suremath {\ mathit {PF}} (E (o)) \).
Для доказательства леммы нам нужно показать, что (1) \ (\ overline {E} \) взаимно однозначно, а (2) \ (\ overline {E} \) не имеет префиксов. Фактически, свобода префикса является более сильным условием, чем взаимно однозначность (если две строки равны, то, в частности, одна из них является префиксом другой), и, следовательно, достаточно доказать (2) , что мы сейчас и делаем. .
Пусть \ (o \ neq o ‘\) in \ (\ mathcal {O} \) — два различных объекта.Мы докажем, что \ (\ overline {E} (o) \) не является префиксом \ (\ overline {E} (o ‘) \). Определите \ (x = E (o) \) и \ (x ‘= E (o’) \). Поскольку \ (E \) взаимно однозначно, \ (x \ neq x ‘\). Согласно нашему предположению, \ (\ suremath {\ mathit {PF}} (x) \) является префиксом \ (\ suremath {\ mathit {PF}} (x ‘) \). Если \ (| x | <| x '| \), то два бита в позициях \ (2 | x |, 2 | x | +1 \) в \ (\ suremath {\ mathit {PF}} (x) \ ) имеют значение \ (01 \), но соответствующие биты в \ (\ suremath {\ mathit {PF}} (x ') \) будут равны либо \ (00 \), либо \ (11 \) (в зависимости от \ (| x | \) - ый бит \ (x '\)) и, следовательно, \ (\ suremath {\ mathit {PF}} (x) \) не может быть префиксом \ (\ suremath {\ mathit {PF}) }(Икс')\).Если \ (| x | = | x '| \), то, поскольку \ (x \ neq x' \), должна быть координата \ (i \), по которой они различаются, что означает, что строки \ (\ suremath { \ mathit {PF}} (x) \) и \ (\ suremath {\ mathit {PF}} (x ') \) различаются координатами \ (2i, 2i + 1 \), что снова означает, что \ (\ suremath {\ mathit {PF}} (x) \) не может быть префиксом \ (\ suremath {\ mathit {PF}} (x ') \). Если \ (| x |> | x ‘| \), то \ (| \ suremath {\ mathit {PF}} (x) | = 2 | x | +2> | \ suremath {\ mathit {PF}} (x ‘) | = 2 | x’ | +2 \) и, следовательно, \ (\ suremath {\ mathit {PF}} (x) \) длиннее (и не может быть префиксом) \ (\ suremath {\ mathit { PF}} (x ‘) \).Во всех случаях мы видим, что \ (\ suremath {\ mathit {PF}} (x) = \ overline {E} (o) \) не является префиксом \ (\ suremath {\ mathit {PF}} (x ‘ ) = \ overline {E} (o ‘) \), что завершает доказательство.
Доказательство леммы 2.20 — не единственный и даже не лучший способ преобразовать произвольное представление в безпрефиксную форму. В упражнении 2.10 предлагается построить более эффективное преобразование без префиксов, удовлетворяющее \ (| \ overline {E} (o) | \ leq | E (o) | + O (\ log | E (o) |) \).
«Доказательство Python» (необязательно)
Доказательства теоремы 2.18 и лемма 2.20 являются конструктивными в том смысле, в каком они дают нам:
Способ преобразования функций кодирования и декодирования любого представления объекта \ (O \) в функции кодирования и декодирования без префиксов, и
Способ расширения кодирования и декодирования отдельных объектов без префиксов до кодирования и декодирования списков объектов путем конкатенации.
В частности, мы могли преобразовать любую пару функций Python
encode
иdecode
в функцииpfencode
иpfdecode
, которые соответствуют кодированию и декодированию без префиксов.Точно так же, учитываяpfencode
иpfdecode
для отдельных объектов, мы можем расширить их до кодирования списков. Покажем, как это работает для функцийNtS
иStN
, которые мы определили выше.Мы начинаем с «Python-доказательства» леммы 2.20: способа преобразования произвольного представления в представление без префикса . Функция
без префикса
ниже принимает в качестве входных данных пару функций кодирования и декодирования и возвращает тройку функций, содержащих функции кодирования и декодирования без префиксов , а также функцию, которая проверяет, является ли строка допустимой кодировкой объект.# принимает функции кодирования и отображения декодирования # объекты в списки битов и наоборот, # и возвращает функции pfencode и pfdecode, которые # сопоставляет объекты спискам битов и наоборот # без префиксов. # Также возвращает функцию pfvalid, которая говорит # является ли список допустимой кодировкой def без префиксов (кодирование, декодирование): def pfencode (o): L = кодировать (o) return [L [i // 2] для i в диапазоне (2 * len (L))] + [0,1] def pfdecode (L): return decode ([L [j] для j в диапазоне (0, len (L) -2,2)]) def pfvalid (L): return (len (L)% 2 == 0) и all (L [2 * i] == L [2 * i + 1] для i в диапазоне ((len (L) -2) // 2)) и L [-2:] == [0,1] вернуть pfencode, pfdecode, pfvalid pfNtS, pfStN, pfvalidN = без префиксов (NtS, StN) НТС (234) # 11101010 пфНТС (234) # 111111001100110001 пфСтН (пфНТС (234)) # 234 pfvalidM (pfNtS (234)) # true
Обратите внимание, что приведенная выше функция Python
prefixfree
принимает две функции Python в качестве входных и выводит три функции Python в качестве выходных.(Когда это не слишком неудобно, мы используем термин «функция Python» или «подпрограмма», чтобы различать такие фрагменты программ Python и математических функций.) Вам не обязательно знать Python в этом курсе, но вам нужно получить комфортно с идеей функций как математических объектов сами по себе, которые могут использоваться как входы и выходы других функций.Теперь мы покажем «Python-доказательство» теоремы 2.18. А именно, мы показываем функцию
represlists
, которая принимает в качестве входных данных схему представления без префиксов (реализованную через функции кодирования, декодирования и проверки действительности) и выводит схему представления для списков таких объектов.Если мы хотим сделать это представление без префиксов, мы могли бы вписать его в функциюprefixfree
выше.def репреслисты (pfencode, pfdecode, pfvalid): "" " Принимает на себя функции pfencode, pfdecode и pfvalid, и возвращает функции encodelists, decodelists который может кодировать и декодировать списки объектов соответственно. "" " def encodelist (L): "" "Получает список объектов, кодирует его как список битов" "" return "" .join ([pfencode (obj) для obj в L]) def decodelist (S): "" "Получает списки битов, возвращает списки объектов" "" я = 0; j = 1; res = [] в то время как j <= len (S): если pfvalid (S [i: j]): res + = [pfdecode (S [i: j])] я = j j + = 1 вернуть res вернуть список кодирования, список декодирования LtS, StL = списки представителей (pfNtS, pfStN, pfvalidN) LtS ([234,12,5]) # 111111001100110001111100000111001101 StL (LtS ([234,12,5])) # [234, 12, 5]
Буквы и текст
Мы можем представить букву или символ строкой, а затем, если это представление не содержит префиксов, мы можем представить последовательность символов, просто объединив представление каждого символа.Одним из таких представлений является ASCII, который представляет буквы и символы \ (128 \) в виде строк из \ (7 \) битов. Поскольку представление ASCII имеет фиксированную длину, оно автоматически не содержит префиксов (вы понимаете, почему?). Юникод - это представление (на момент написания) около 128000 символов в виде чисел (известных как кодовых точек ) между \ (0 \) и \ (1,114,111 \). Существует несколько типов представления кодовых точек без префиксов, популярным из которых является UTF-8, который кодирует каждую кодовую точку в строку длиной от \ (8 \) до \ (32 \).6 \), который написан с использованием точек с отступом, расположенных в два столбца и три строки, см. Рисунок 2.10. (Для кодирования некоторых символов требуется более одной шестибитной строки, поэтому в системе Брайля используется более общая кодировка без префиксов.)
Система Брайля была изобретена в 1821 году Луи Брайлем, когда ему было всего 12 лет (хотя он продолжал работать над ней и улучшать ее на протяжении всей своей жизни). Брайль был французским мальчиком, потерявшим зрение в возрасте 5 лет в результате несчастного случая.
Мы можем использовать языки программирования, чтобы исследовать, как наша вычислительная среда представляет различные ценности.Проще всего это сделать на «небезопасных» языках программирования, таких как
C
, которые разрешают прямой доступ к памяти.Используя простую программу
C
, мы получили следующие представления различных значений. Можно видеть, что для целых чисел умножение на 2 соответствует «сдвигу влево» внутри каждого байта. Напротив, для чисел с плавающей запятой умножение на два соответствует добавлению единицы к показательной части представления. В используемой нами архитектуре отрицательное число представлено с использованием подхода дополнения двух.C
представляет строки в форме без префиксов, гарантируя, что в их конце находится нулевой байт.int 2: 00000010 00000000 00000000 00000000 интервал 4: 00000100 00000000 00000000 00000000 интервал 513: 00000001 00000010 00000000 00000000 длинный 513: 00000001 00000010 00000000 00000000 00000000 00000000 00000000 00000000 интервал -1: 11111111 11111111 11111111 11111111 внутр -2: 11111110 11111111 11111111 11111111 строка Hello: 01001000 01100101 01101100 01101100 01101111 00000000 строка abcd: 01100001 01100010 01100011 01100100 00000000 поплавок 33.0: 00000000 00000000 00000100 01000010 с плавающей точкой 66.0: 00000000 00000000 10000100 01000010 с плавающей точкой 132.0: 00000000 00000000 00000100 01000011 двойной 132.0: 00000000 00000000 00000000 00000000 00000000 10000000 01100000 01000000
Представление векторов, матриц, изображений
Как только мы можем представить числа и списки чисел, мы также можем представить векторов (которые представляют собой просто списки чисел). Точно так же мы можем представлять списки списков, и таким образом, в частности, можем представлять матриц .Чтобы представить изображение, мы можем представить цвет каждого пикселя списком из трех чисел, соответствующих интенсивности красного, зеленого и синего цветов. (Мы можем ограничиться тремя основными цветами, поскольку у большинства людей в сетчатке глаза есть только три типа колбочек; нам потребовалось бы 16 основных цветов для представления цветов, видимых креветке-богомолу.) Таким образом, изображение размером \ (n \) пикселей будет представлен списком из \ (n \) таких списков длиной три. Видео можно представить в виде списка изображений. Конечно, эти представления довольно расточительны, и для изображений и видео обычно используются гораздо более компактные представления, хотя в этой книге мы не будем этим заниматься.2} \) такое, что \ (A_ {i, j} = 1 \) тогда и только тогда, когда край \ (\ overrightarrow {i \; j} \ in E \). Мы можем преобразовать неориентированный граф в ориентированный, заменив каждое ребро \ (\ {i, j \} \) на оба ребра \ (\ overrightarrow {i \; j} \) и \ (\ overleftarrow {i \; j } \)
Другое представление для графов - это представление списка смежности . То есть мы отождествляем множество вершин \ (V \) графа с множеством \ ([n] \), где \ (n = | V | \), и представляем граф \ (G = (V, E) \) как список \ (n \) списков, где \ (i \) - й список состоит из внешних соседей вершины \ (i \).Разница между этими представлениями может быть значительной для некоторых приложений, хотя для нас обычно несущественна.
2.11: Представление графа \ (G = (\ {0,1,2,3,4 \}, \ {(1,0), (4,0), (1,4), (4,1), (2,1), (3,2), (4,3) \}) \) в представлениях матрицы и списка смежности.Представление списков и вложенных списков
Если у нас есть способ представления объектов из набора \ (\ mathcal {O} \) в виде двоичных строк, то мы можем представлять списки этих объектов, применяя преобразование без префиксов.* \), то мы можем представить вложенные списки элементов из \ (\ mathcal {O} \), используя строки в пятиэлементном алфавите \ (\ Sigma = \ {\)
0
,1
,[
,]
,,
\ (\} \). Например, если \ (o_1 \) представлен0011
, \ (o_2 \) представлен10011
, а \ (o_3 \) представлен00111
, то мы можем представить вложенный список \ ( (o_1, (o_2, o_3)) \) как строка"[0011, [10011,00111]]"
над алфавитом \ (\ Sigma \).* \) - это некоторая функция, которая отображает строки в строки, а \ (n \) - целое число, мы могли бы делать такие утверждения, как «\ (F (n) +1 \) является простым», чтобы означать, что если мы представляем \ (n \) как строку \ (x \), то целое число \ (m \), представленное строкой \ (F (x) \), удовлетворяет тому, что \ (m + 1 \) простое число. (Вы можете видеть, как это соглашение об идентификации объектов с их представлением может избавить нас от громоздкого формализма.) Точно так же, если \ (x, y \) - некоторые объекты, а \ (F \) - функция, которая принимает строки в качестве входных данных. , то под \ (F (x, y) \) будем понимать результат применения \ (F \) к представлению упорядоченной пары \ ((x, y) \).Мы используем те же обозначения для вызова функций на \ (k \) - наборах объектов для каждого \ (k \).Это соглашение об идентификации объекта с его представлением в виде строки - это то, которому мы, люди, всегда следуем. Например, когда люди говорят такое утверждение, как «\ (17 \) - простое число», на самом деле они имеют в виду, что целое число, десятичное представление которого представляет собой строку «
17
», является простым.Когда мы говорим
\ (A \) - алгоритм, вычисляющий функцию умножения натуральных чисел.* \) - это строка, представляющая пару \ ((a, b) \), тогда \ (F (x) \) будет строкой, представляющей их продукт \ (a \ cdot b \).
Определение вычислительных задач как математических функций
В абстрактном смысле вычислительный процесс - это некоторый процесс, который принимает на входе строку битов и производит вывод, который представляет собой строку битов. Это преобразование ввода в вывод может быть выполнено с использованием современного компьютера, человека, выполняющего инструкции, эволюции какой-либо естественной системы или любых других средств.
В следующих главах мы обратимся к математическому определению вычислительных процессов, но, как мы обсуждали выше, в настоящий момент мы сосредоточены на вычислительных задачах . То есть мы ориентируемся на спецификацию , а не на реализацию . Опять же, на абстрактном уровне вычислительная задача может определять любые отношения, которые должны иметь выход с входом. Однако большую часть этой книги мы сосредоточимся на простейшей и наиболее распространенной задаче вычисления функции .* \ rightarrow \ {0,1 \} \) такое, что \ (F (x) = 1 \), если \ (x \ in L \) и \ (F (x) = 0 \), если \ (x \ not \ в L \). Функции с одним битом вывода называются логическими функциями , а подмножества строк называются языками . Вышеупомянутое показывает, что это два, по сути, один и тот же объект, и мы можем идентифицировать задачу определения принадлежности к \ (L \) (известную в литературе как , определяющую язык ) с задачей вычисления функции \ (F \ ).
Для каждой конкретной функции \ (F \) может быть несколько возможных алгоритмов для вычисления \ (F \).Нам будут интересны такие вопросы как:
Может ли быть случай, что для данной функции \ (F \) не существует алгоритма для вычисления \ (F \)?
Если есть алгоритм, какой лучший? Может ли быть, что \ (F \) «фактически невычислим» в том смысле, что каждый алгоритм для вычисления \ (F \) требует чрезмерно большого количества ресурсов?
Если мы не можем ответить на этот вопрос, можем ли мы показать эквивалентность между различными функциями \ (F \) и \ (F '\) в том смысле, что либо они обе просты (т.е., есть быстрые алгоритмы) или они оба сложные?
Может ли функция, которую трудно вычислить, когда-либо быть хорошей ? Можем ли мы использовать его для приложений в таких областях, как криптография?
Для этого нам необходимо математически определить понятие алгоритма , что мы и сделаем в главе 3.
Отличите функции от программ!
Вы всегда должны остерегаться возможных противоречий между спецификациями и реализациями или эквивалентным образом между математическими функциями и алгоритмами / программами .Не помогает то, что языки программирования (включая Python) используют термин «функции» для обозначения (частей) программ . Эта путаница также происходит из тысячелетней истории математики, когда люди обычно определяли функции с помощью способа их вычисления.
Например, рассмотрим функцию умножения натуральных чисел. Это функция \ (\ suremath {\ mathit {MULT}}: \ N \ times \ N \ rightarrow \ N \), которая отображает пару \ ((x, y) \) натуральных чисел в число \ (x \ cdot y \).Как мы уже упоминали, это может быть реализовано более чем одним способом:
def mult1 (x, y): res = 0 пока y> 0: res + = x у - = 1 вернуть res def mult2 (x, y): a = str (x) # представить x как строку в десятичной системе счисления b = str (y) # представить y как строку в десятичной системе счисления res = 0 для i в диапазоне (len (a)): для j в диапазоне (len (b)): res + = int (a [len (a) -i]) * int (b [len (b) -j]) * (10 ** (i + j)) вернуть res печать (mult1 (12,7)) # 84 печать (mult2 (12,7)) # 84
И
2.13: Функция - это отображение входов на выходы.Программа - это набор инструкций о том, как получить вывод при вводе. Программа вычисляет функцию, но это не то же самое, что функция, несмотря на популярную терминологию языка программирования.mult1
, иmult2
выдают одинаковый результат при одинаковой паре входных натуральных чисел.(Хотяmult1
займет гораздо больше времени, когда числа станут большими.) Следовательно, хотя это две разные программы , они вычисляют одну и ту же математическую функцию . Это различие между программой или алгоритмом \ (A \) и функцией \ (F \), которую \ (A \) вычисляет , будет абсолютно решающим для нас в этом курсе (см. Также рисунок 2.13). ).Функция отличается от программы . Программа вычисляет функцию.
Отличие функций от программ (или других способов вычислений, включая схемы и машины ) - важная тема для этого курса.* \). Эта задача включает в себя не только арифметические вычисления, такие как умножение, разложение на множители и т. Д., Но и множество других задач, возникающих в таких разнообразных областях, как научные вычисления, искусственный интеллект, обработка изображений, интеллектуальный анализ данных и многие другие.
Мы изучим вопрос поиска (или, по крайней мере, определения границ), что такое лучший алгоритм для вычисления \ (F \) для различных интересных функций \ (F \). Упражнения
Какой из этих объектов может быть представлен двоичной строкой?
Целое число \ (x \)
Неориентированный граф \ (G \).* \ rightarrow \ N \) такое, что \ (StN (NtS (n)) = n \) для каждого \ (n \ in \ N \).
Кодировку ASCII можно использовать для кодирования строки из \ (n \) английских букв как двоичной строки \ (7n \) бит, но в этом упражнении мы просим найти более компактное представление для строк английских строчных букв.
Докажите, что существует схема представления \ ((E, D) \) для строк из 26-буквенного алфавита \ (\ {a, b, c, \ ldots, z \} \) в виде двоичных строк такая, что для каждого \ (n> 0 \) и длины - \ (n \) строка \ (x \ in \ {a, b, \ ldots, z \} ^ n \), представление \ (E (x) \) представляет собой двоичную строку длиной не более \ (4.{\ lfloor 4.6n + 1000 \ rfloor} \).
Функция Python
bz2.compress
- это преобразование строк в строки, в котором для сжатия используется алгоритм без потерь (и, следовательно, один к одному ) bzip2. После преобразования в нижний регистр и сокращения пробелов и чисел текст Толстого «Война и мир» содержит \ (n = 2 517 262 \). Тем не менее, если мы запустимbz2.compress
в строке текста «Война и мир», мы получим строку длиной \ (k = 6 274 768 \) бит, что составляет всего \ (2.49n \) (и, в частности, намного меньше, чем \ (4.6n \)). Объясните, почему это не противоречит вашему ответу на предыдущий вопрос.Интересно, что если мы попытаемся применить
bz2.compress
к случайной строке , мы получим намного худшую производительность. В своих экспериментах я получил соотношение примерно \ (4,78 \) между количеством бит на выходе и количеством символов на входе. Тем не менее, можно представить, что можно было бы добиться большего и что существует компания под названием «Pied Piper» с алгоритмом, который может без потерь сжимать строку из \ (n \) случайных строчных букв до менее чем \ (4. {\ lfloor 0.* \) представляет собой представление натуральных чисел без префиксов. Определим \ (F '(o) = G (| F (o) |) F (o) \) (т.е. конкатенацию представления длины \ (F (o) \) и \ (F (o) \)).
Докажите, что \ (F '\) является представлением \ (O \) без префиксов.
Покажите, что мы можем преобразовать любое представление в представление без префиксов путем модификации, которая переводит строку битов \ (k \) в строку длиной не более \ (k + O (\ log k) \).
Покажите, что мы можем преобразовать любое представление в представление без префиксов путем модификации, которая переводит строку битов \ (k \) в строку длиной не более \ (k + \ log k + O (\ log \ log k) \).* \) в \ (\ mathbb {N} \), где \ (\ mathbb {Z} \) - это набор \ (\ {\ ldots, -3, -2, -1,0, + 1, + 2 , + 3, \ ldots \} \) всех целых чисел.
Библиографические примечания
Изучение представления данных в виде строк, включая такие вопросы, как сжатие , и исправление ошибок . относится к сфере теории информации , как описано в классическом учебнике Ковер и Томас (Cover, Thomas, 2006). Представления также изучаются в области проектирования структур данных , как описано в таких текстах, как (Cormen, Leiserson, Rivest, Stein, 2009).
Вопрос о том, следует ли представлять целые числа с первой или последней значащей цифрой, известен как представление с прямым порядком байтов и прямым порядком байтов. Эта терминология взята из занимательной и информативной статьи Коэна (Cohen, 1981) о конфликте между приверженцами обеих школ, который он сравнил с враждующими племенами в книге Джонатана Свифта «Путешествие Гулливера» . Дополнение до двух целых чисел со знаком было предложено в классическом отчете фон Неймана (von Neumann, 1945), в котором подробно описаны подходы к проектированию для компьютера с хранимой программой, хотя аналогичные представления использовались еще раньше в счетах и других механических вычислительных устройствах.
Идея о том, что мы должны отделить определение или спецификацию функции от ее реализации или вычисления , может показаться «очевидной», но математикам потребовалось довольно много времени, чтобы прийти к этой точке зрения. Исторически функция \ (F \) определялась правилами или формулами, показывающими, как получить результат из ввода. Как мы более подробно обсудим в главе 9, в 1800-х годах это несколько неформальное понятие функции начало «ломаться по швам», и в конечном итоге математики пришли к более строгому определению функции как произвольного назначения входных данных выходным.Хотя многие функции могут быть описаны (или вычислены) одной или несколькими формулами, сегодня мы не считаем это существенным свойством функций, а также допускаем функции, которые не соответствуют какой-либо «хорошей» формуле.
Мы упоминали, что все представления действительных чисел по своей сути являются приблизительными . Таким образом, важно понять, какие гарантии мы можем предложить в отношении качества аппроксимации выходных данных алгоритма в зависимости от качества аппроксимации входных данных.Этот вопрос известен как вопрос определения численной устойчивости заданных уравнений. Веб-сайт руководства по плавающей запятой содержит подробное описание представления с плавающей запятой, а также множество способов, которыми он может незаметно выйти из строя, см. Также веб-сайт 0.30000000000000004.com.
Даубен (Dauben, 1990) дает биографию Кантора с акцентом на развитие его математических идей. (Halmos, 1960) - классический учебник по теории множеств, включающий также теорему Кантора.Теорема Кантора также рассматривается во многих текстах по дискретной математике, в том числе (Lehman, Leighton, Meyer, 2018) (Lewis, Zax, 2019).
Представление графов матрицей смежности - это не просто удобный способ отобразить граф в двоичную строку, но оказывается, что многие естественные понятия и операции с матрицами полезны и для графов. (Например, алгоритм Google PageRank опирается на эту точку зрения.) Примечания к курсу Спилмана являются отличным источником в этой области, известной как теория спектральных графов .Мы вернемся к этой точке зрения намного позже в этой книге, когда будем говорить о случайных блужданиях .
Комментарии размещаются в репозитории GitHub с помощью приложения utteranc.es. Для комментирования требуется логин GitHub. Если вы не хотите разрешать приложению отправлять сообщения от вашего имени, вы также можете прокомментировать Проблема с GitHub для этой страницы.
Составлено 02.09.2021 18:24:47
Авторские права 2019, Боаз Барак.
Это произведение под лицензией Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 Международная лицензия.Создано с использованием pandoc и panflute с шаблонами, полученными из gitbook и bookdown.
Глава 6: Целочисленное представление и арифметика
Глава 6: Целочисленное представление и арифметикаЦелочисленное представление и арифметика
Целочисленное представление
- Бит - двоичная цифра
- 1 байт = 8 бит
- 1 слово = 2 байта
- Целое число занимает два байта; может быть подписанным или неподписанным.
Целые числа без знака
- Может представлять целые числа от 0 до 65 535
- В двоичном формате это от
- Внутренне, двоичное представление десятичного значения как 16 бит.
Целые числа со знаком
- Необходимо зарезервировать один бит для знака.
- Три пути:
- Знак-величина
- Дополнение до 1
- Дополнение 2
Знак - величина
- Использует старший бит слова для представления знака.
- 0 - положительный
- 1 - Отрицательный.
- Остальная часть числа закодирована в части величины
37 = 00000000 00100101 -37 = 10000000 001001016712 = 00011010 00111000 -6712 = 10011010 00111000
- Может представлять числа от -32 767 до 32 767.
- Но, два представления для нуля:
0 = 00000000 00000000 -0 = 10000000 00000000- Арифметика может быть громоздкой.
Дополнение 1
- Отрицательное число сохраняется как побитовое дополнение соответствующего положительного числа. количество.
- Крайний левый бит положительного числа равен 0. Бит отрицательного числа равен 1.
196 = 00000000 11000100 -196 = 11111111 00111011
- Может представлять числа от -32 767 до 32 767.
- Арифметика проще, чем знак-величина.
- Но все еще есть два представления для нуля:
0 = 00000000 00000000 -0 = 11111111 11111111
Дополнение 2
- Современный метод
- Положительное число, представленное так же, как и другие два метода
- Отрицательное число, полученное взятием дополнения к положительному числу до единицы и добавив 1.
6713 = 00011000 00011101 Композиция 1 = 11100111 11100010 Композиция 2 = 11100111 11100011
- Целое число Word может представлять числа от -32 768 до 32 767.
- Целое число байтов может представлять числа от -128 до 127.
- Одна версия нуля:
00000000 00000000
Преобразование байтового целого числа в слово
- Расширение знака
- Копировать знаковый бит байта во все биты старшего байта слово.
37 = 00100101 -> 00000000 00100101 -37 = 11011011 -> 11111111 11011011- CBW
- преобразует подписанный байт в AL в слово в AX
Преобразование слова целого числа в байт
- Удалить старший байт слова. Сохраните только младший байт.
- Имеет значение, только если исходный номер может быть представлен байтом.
Целочисленная арифметика (сравнение единиц и двух)
- Дополнение: просто добавьте два двоичных представления.
- Вычитание: найти отрицательное значение одного числа, прибавить ко второму.
Дополнение к 1 комп.
- Сложите двоичные представления двух чисел.
- Если есть переноска, добавьте ее обратно с правой стороны.
51 00110011 + (-37) + 11011010 ---------- 1 00001101 +1 ---------- 14 00001110Дополнение к 2 Comp
- Сложите двоичные представления двух чисел.
- Не обращайте внимания на перенос.
51 00110011 + (-37) + 11011011 ---------- 14 1 00001110Вычитание в 2-х Comp
Перелив
- Если два числа имеют разные знаки, их сумма никогда не переполнится.
- Если у них одинаковый знак, они могут переполниться.
- Произошло переполнение, если знак результата отличается от знака добавлений.
Сложение, вычитание, увеличение, уменьшение и отрицаниедобавить / дополнительную регистрацию / память, регистр / память / константу
- Оба операнда должны быть одинакового размера
- Максимум, один операнд может быть из памяти
инкр. / Дек. Рег. / Мем.
- операнды могут быть байтами или словами
негр. Рег / мем
- Инвертирует байт или слово операнда
Умножение
mov AX, банан имул вишня mov Apple, AX- DX содержит все биты знака (надеюсь)
Дивизия
mov AX, банан cwd идив вишня mov AX, Apple- остаток находится в DX
math - Может ли действительное число IEEE 754 "охватывать" все целые числа в пределах своего диапазона?
Нет, не все, но существует диапазон, в котором вы можете точно представить все целые числа.
Структура 32-битных чисел с плавающей запятой
32-битный тип с плавающей запятой использует
- 1 бит для знака
- 8 бит для экспоненты
- 23 бита для дроби (подразумевается ведущая 1)
Представляющие числа
По сути, у вас есть номер в форме
(-) 1.xxxx_xxxx_xxxx_xxxx_xxxx_xxx (двоичный)
, который затем вы сдвигаете влево / вправо с (несмещенной) экспонентой.
Чтобы он представлял целое число, требующее
n
бит, вам необходимо сдвинуть его наn-1
бит влево. (Всеx
es за пределами числа с плавающей запятой просто равны нулю)Представление целых 24-битных чисел
Легко видеть, что мы можем представить все целые числа, требующие 24 бита (и меньше)
1xxx_xxxx_xxxx_xxxx_xxxx_xxxx.0 (несмещенная экспонента = 23)
, поскольку мы можем установить
x
es по желанию либо на1
, либо на0
.24 - 1 = 16777215Следующее большее целое число -
1_0000_0000_0000_0000_0000_0000
. Таким образом, нам нужно 25 бит.Представление целых чисел с 25 битами
Если вы попытаетесь представить 25-битное целое число (несмещенная экспонента = 24), числа будут иметь следующий вид:
1_xxxx_xxxx_xxxx_xxxx_xxxx_xxx0.0
Все двадцать три цифры, доступные вам, были сдвинуты за пределы числа с плавающей запятой. Первая цифра всегда равна 1.Всего у нас 24 цифры. Но поскольку нам нужно 25, добавляется ноль.
Максимум найден
Мы можем представить
`1_0000_0000_0000_0000_0000_0000
в форме1_xxxx_xxxx_xxxx_xxxx_xxxx_xxx0.0
, просто назначив1
всемx
es. Следующее большее целое число:1_0000_0000_0000_0000_0000_0001
. Легко видеть, что это число не может быть представлено точно, потому что форма не позволяет нам установить последнюю цифру на1
: это всегда0
.Отсюда следует, что
1
, за которыми следуют 24 нуля, являются верхней границей для целых чисел, которые мы можем точно представить. У нижней границы просто переворачивается знаковый бит.Диапазон, в котором могут быть представлены все целые числа (включая границы)
- 2 24 как верхняя граница
- -2 24 как нижняя граница
Структура 64-битных чисел с плавающей запятой
- 1 бит для знака
- 11 разрядов экспоненты
- 52 дробных бита
Диапазон, в котором могут быть представлены все целые числа (включая границы)
- 2 54 как верхняя граница
- -2 54 как нижняя граница
Это легко можно сделать, применив ту же аргументацию к структуре 64-битных чисел с плавающей запятой.
Примечание : Это не означает, что это все целых чисел, которые мы можем представить, но это дает вам диапазон, в котором вы можете представить всех целых чисел. За пределами этого диапазона мы можем представить только степень двойки, умноженную на целое число из указанного диапазона.
Комбинаторный аргумент
Просто убеждая себя в том, что 32-битные числа с плавающей запятой не могут представлять все целые числа, которые может представлять 32-битное целое число, нам даже не нужно смотреть на структуру чисел с плавающей запятой.
- Используя 32 бита, мы можем представить 2 32 различных вещей. Не больше, не меньше.
- 32-битное целое число использует все эти "вещи" для представления чисел (попарно различных).
- 32-битное число с плавающей запятой может представлять по крайней мере одно число с дробной частью.
Таким образом, 32-битное число с плавающей запятой не может представлять это дробное число в дополнение ко всем 2 32 целым числам.