почему диапозон чисел в компьютере ограничен? связано ли это с двоичностью
Почему диапозон чисел в компьютере ограничен? связано ли это с двоичностью компьютерной арифметики?
- Степан Свячена
- Информатика
- 2019-08-13 14:36:36
- 2
- 1
Да, связано. Все числовые типы в компьютере имеют нижнюю и верхнюю границу. Они хранятся в памяти компьютера в двоичном виде. Чем больше памяти (кол-во бит = позиций с нулем либо единицей) выделяется на число, тем больше разных значений оно может содержать. Поэтому, максимально возможное значение числа есть всегда.
Почему диапазон чисел в компьютере ограничен
©Reshak.ru — сборник решебников для учеников старших классов. Здесь можно найти решебники, ГДЗ, переводы текстов по школьной программе. Практически весь материал, собранный на сайте — авторский с подробными пояснениями профильными специалистами. Вы сможете скачать гдз, решебники, улучшить школьные оценки, повысить знания, получить намного больше свободного времени.
Главная задача сайта: помогать школьникам и родителям в решении домашнего задания. Кроме того, весь материал совершенствуется, добавляются новые сборники решений.
Урок 31 — 35
Хранение в памяти целых и вещественных чисел. Арифметические и логические (битовые) операции. Маски
§26. Особенности представления чисел в компьютере. §27. Хранение в памяти целых чисел. § 28. Операции с целыми числами. §29. Хранение в памяти вещественных чисел
1. Чем отличается компьютерная арифметика от «обычной»? Почему?
2. Почему диапазон чисел в компьютере ограничен? Связано ли это с двоичностью компьютерной арифметики?
3. Что такое переполнение разрядной сетки?
4. Какие проблемы появляются при ограниченном числе разрядов в дробной части?
5. Что называется антипереполнением? Что, по-вашему, опаснее для вычислений — переполнение или антипереполнение?
*6. Может ли антипереполнение сделать невозможными дальнейшие вычисления?
7. Сколько битов информации несёт знаковый разряд?
8. Приведите примеры величин, которые по своему смыслу могут иметь только целые значения.
9. Какая математическая операция между двумя целыми числами может дать в результате нецелое число?
10. Чем различается деление для целых и вещественных чисел?
11. Какие преимущества даёт разделение в компьютере целых и вещественных (дробных) чисел?
12. Вспомните определение дискретных и непрерывных величин. Какие множества чисел в математике дискретны, а какие — нет? Ответ обоснуйте.
13. Объясните, почему ограниченность разрядов дробной части приводит к нарушению свойства непрерывности.
14. Можно ли организовать вычисления с разрядностью, превышающей аппаратную разрядность компьютера? Попробуйте предложить способы решения этой задачи.
Подготовьте сообщение
а) «Проблемы вычислений с вещественными данными»
б) «Длинная арифметика»
Следующая страница Задачи
Cкачать материалы урока
Представление чисел в компьютере и погрешность
Так как для записи числа в компьютере выделяется ограниченная область памяти, то числовые значения ограничены. Границы значений зависят от типа числа и конкретной среды программирования или математического пакета. В таблице 1.1 представлены диапазоны значений чисел различных типов в языке программирования C.
Тип | Размер памяти в байтах | Диапазон возможных значений |
short int | –32768 | |
long int | –2147483648 | |
unsigned short int | 0 | |
unsigned long int | 0 | |
float | 4 байта = 32 бита 1— знак, 8 — экспонента, 23 — мантисса | Приблизительно 1,17∙10 –38 < x < 3,4∙10 +38 |
double | 8 байт = 64 бита 1— знак, 11 — экспонента, 52 — мантисса | Приблизительно 2,22∙10 –308 < x < 1,79∙10 +308 |
long double | 10 байт = 80 бит | 3,4∙10 – 4932 < x < 3,4∙10 + 4932 |
Если при вычислениях для переменной типа float будет получено число с порядком меньшим чем –38, оно будет заменено нулем, а если порядок числа превысит 38, то произойдет так называемый «аварийный останов» (система прекратит выполнение программы пользователя) и выведено сообщение о переполнении порядка. Для переменной типа float число с порядком меньшим чем –38 является нулем, а число с порядком большим, чем 38 — бесконечностью. Для переменной типа double нулем являются значения с порядком меньшим чем –308, а бесконечностью — значения с порядком большим, чем 308.
В таблице 1.2 приведены константы для чисел с плавающей точкой стандартной библиотеки языка программирования C.
Константа | Описание константы | Значение |
FLT_DIG | Количество верных десятичных цифр в объекте типа float | |
FLT_EPSILON | Минимально возможное значение переменной типа float, такое, что 1.0 + FLT_EPSILON ≠ 1.0 | 1.192093e–07 |
FLT_MAX | Максимальное число с плавающей точкой типа float | 3.402823e+38 |
FLT_MIN | Минимальное число с плавающей точкой типа float | 1.175494e–38 |
DBL_DIG | Количество верных десятичных цифр в объекте типа double | |
DBL _EPSILON | Минимально возможное значение переменной типа double, такое, что 1.0 + DBL_EPSILON ≠ 1.0 | 2.220446e–16 |
DBL _MAX | Максимальное число с плавающей точкой типа double | 1.797693e+308 |
DBL _MIN | Минимальное число с плавающей точкой типа double | 2.225074e–308 |
LDBL_DIG | Количество верных десятичных цифр в объекте типа long double | |
LDBL _EPSILON | Минимально возможное значение переменной типа long double, такое, что 1.0 + LDBL_EPSILON ≠ 1.0 | |
LDBL _MAX | Максимальное число с плавающей точкой типа long double | |
LDBL _MIN | Минимальное число с плавающей точкой типа long double |
В программах OpenOffice Calc, Microsoft Excel и Mathcad границы значений числа приблизительно соответствуют типу double языка C. Мантисса может содержать до 15 десятичных цифр. Например, число десятичных знаков числа с плавающей точкой в программе Excel можно найти очень простым способом: записать в ячейку формулу =1/3 и с помощью команды меню «формат ячейки» определить формат «числовой с 20 знаками после запятой». Мы увидим, что мантисса числа содержит 15 (значащих) десятичных цифр, остальные цифры равны нулю.
Если в программах Excel и Mathcad вычислить значение
1 + 10 –15 , то получим ноль, а значение выражения 1 + 10 –14 будет равно
1,00000000000001. Это число содержит 15 значащих цифр. Предельной относительной погрешностью представления числа с плавающей точкой в программах Excel и Mathcad можно считать 10 –14 .
Относительная погрешность представления чисел с плавающей точкой («машинное эпсилон») определяется как наименьшее положительное число ε, при сложении которого с единицей получается отличное от единицы число. Это значение зависит от количества знаков, которые можно записать в мантиссе числа.
Для приблизительной оценки значения относительной погрешности представления можно предложить следующий алгоритм:
4) Выводим значение 2ε.
Вычислим по этому алгоритму в программе Excel значение ε. Для этого вводим в ячейке A1 значение 1, в ячейке A2 формулу = A1/2, а в ячейке B2 — формулу = 1 + A2. Выделим две ячейки A2:B2 и маркером заполнения протянем вниз до строки 50. В столбце B получим результаты сложения с единицей убывающих чисел из столбца A. В таблице 1.2 приведены последние пять строк вычисленных значений. Очевидно, что за предельную относительную погрешность можно принять значение ε = 7,10543×10 –15 , или, если округлить,
ε ≈ 10 –14 , и максимальное число значащих цифр в мантиссе составляет 15.
A | B |
2,84217E–14 | 1,00000000000003000000 |
1,42109E–14 | 1,00000000000001000000 |
7,10543E–15 | 1,00000000000001000000 |
3,55271E–15 | 1,00000000000000000000 |
1,77636E–15 | 1,00000000000000000000 |
Создадим в программе Excel макрос — пользовательскую функцию для определения значения ε.
Выполним команду меню «Сервис — Макрос — Редактор Visual Basic»; в открывшемся окне выберем меню «Insert — Module» и введем описание функции:
На рис. 1.2 показано окно Редактора Visual Basic с введенным текстом программы.
Перейдем на лист Excel и введем в любой ячейке формулу = epsilon(), получим в этой ячейке значение
ε = 2,22045E-16 = 0,000 000 000 000 000 222045.
Отличие полученного значения ε = 2,22045E-16 от значения ε = 7,10543×10 –15 из таблицы 1.2 объясняется особенностями вывода значений в ячейки программы Excel. При выводе числовых значений в форме с фиксированной запятой количество значащих цифр равно 15, остальные цифры отбрасываются.
Применим алгоритм вычисления «машинного эпсилон» в системе программирования Mathcad. Однако, здесь нас ждут интересные особенности. Введем в Mathcad следующую программу:
Вычислим «машинное эпсилон» для языка программирования Borland C++ (версия 5.02). Для этого составим следующую программу:
float eps2,eps = 1,x = 1,y;
eps = eps/2; y = x + eps;
printf(«neps = %e:», eps2);
В результате выполнения программы получим eps = 1.192093e–07. Это значение совпадает с числом FLT_EPSILON = 1.192093e–07, приведенным в таблице 1.1 (Минимально возможное значение переменной типа float, такое, что 1.0 + FLT_EPSILON ≠ 1.0). Если в этой программе мы заменим тип float на тип double, то получим значение eps = 2.220446e–16, которое совпадает с константой DBL_EPSILON.
Особенности реализации вещественной компьютерной арифметики.
Когда говорят о точности представления вещественных чисел в компьютере, надо помнить следующее: десятичное число, имеющее даже всего одну значащую цифру после запятой, вообще говоря, невозможно представить точно в формате с плавающей запятой. Объясняется это тем, что конечные десятичные дроби часто оказываются бесконечными периодическими двоичными дробями. Так 0,110 = 0,0(0011)2, а значит, и в нормализованном виде такое двоичное число будет иметь бесконечную мантиссу и не может быть представлено точно. При записи подобной мантиссы в ячейку компьютера число не усекается, а округляется. Если под мантиссу отведено п разрядов и (n+1)-я значащая цифра двоичной нормализованной мантиссы равна 0, то цифры, начиная с (n+1)-й, просто отбрасываются, если же (n+1)-я цифра равна единице, то к целому числу, составленному из первых п значащих цифр мантиссы, прибавляется единица.
Пример. Рассмотрим, как будет выглядеть запись мантиссы (т) числа а = 0,110 при двоичной нормализации для различного количества бит (n), отведенных под мантиссу. а = 0,110 = 0,0(0011)2 = 0,11(0011)2 × 2 -3 , т. е. мантисса в нормализованном числе есть 0,11(0011)2. При n = 10 m = 1100110011 (остальные цифры мантиссы отброшены в результате округления). При n = 12 m = 110011001101 (последняя цифра изменилась с 0 на 1 при округлении). При n = 13 m = 1100110011010 (две последние цифры изменились при прибавлении 1).
Опишем ситуации, приводящие к неточности вычислений, которые могут возникнуть при операциях сложения и вычитания в вещественной компьютерной арифметике.
1). Потеря значащих цифр мантиссы у меньшего из чисел при выравнивании порядков. При сложении и вычитании вещественных чисел в худшем случае утерянными оказываются все значащие цифры меньшего числа, и a±b=a, что является абсурдным с точки зрения математики, но возможным в компьютерной арифметике с ограниченным числом разрядов (см. пример 12).
2). Потеря крайней справа значащей цифры результата при сложении или вычитании. При сложении и вычитании двух чисел количество значащих цифр может увеличиться лишь на одну, это влияет на точность, но не на правильность результата. Так, при сложении пятнадцатиразрядных мантисс 0,1111100000111112 + 0,1001001001001002 = = 1,1000101010000112,количество значащих цифр стало равным 16, и после округления и нормализации результат будет выглядеть так: 0,110001010100010 × 2 1 .
Гораздо хуже обстоит дело при вычитании близких по модулю и имеющих одинаковый знак чисел (или сложении чисел разного знака). В этом случае достоверной может остаться всего одна значащая цифра, а остальные цифры нормализованной мантиссы (скорее всего нули) окажутся недостоверными. Пусть требуется вычислить разность чисел 0,(0011)2 и 0,0011001100112. Произведем вначале вычитание «на бумаге». Представим первую дробь (она периодическая) в виде 0,001100110011(0011)2. Перед периодом выписали 12 цифр, так как вторая дробь содержит 12 значащих цифр. Произведем вычитание и получим: 0,000000000000(0011)2 = 0,(1100)2 × 2 -14 . Переведем периодическую дробь в десятичную систему счисления и получим 0,8 × 2 -14 . При выполнении этой же операции вычитания в компьютере при условии, что под мантиссу отведено 12 разрядов, получим: 0,1100110011012 × 2 -2 — 0,11001100112 × 2 -2 = 0,12 × 2 -13 = 1 × 2 -14 , т. е. уже старшая значащая цифра результата оказалась неверной
3). Выход за границу допустимого диапазона значений при нормализации результата. Данная ситуация возникает в случае, когда порядок результата оказывается либо больше максимально возможного значения, либо меньше минимально возможного. Такую ситуацию различные компиляторы и операционные системы обрабатывают по-разному, но чаще всего выполнение программы прерывается с сообщением об ошибке «арифметическое переполнение». Выполним сложение 0,12 × 2 127 + 0,12 × 2 127 = 0,12 × 2 128 , и если максимальный представимый порядок равен 127, результат оказывается не представимым.
4). Получение «не представимого». Данная ситуация соответствует описанному выше «арифметическому переполнению»; однако в 80-разрядном представлении вещественных чисел (а именно он является основным в современных персональных компьютерах) диапазон допустимых порядков достаточно велик, чтобы производить практические любые вычислительные работы, и возникновение подобной ошибки скорее всего означает, что программа составлена неверно.
5). Потеря младших значащих цифр результата. Во-первых, при перемножении двух n -значных мантисс может получиться число, состоящее из 2n значащих цифр, только половина из которых будет сохранена в результате. При операции деления количество цифр в частном может оказаться бесконечным и лишь первые п из них будут сохранены. Во-вторых, при операции умножения возможна потеря n— младшей значащей цифры результата при сдвиге мантиссы на один разряд влево. Самый правый разряд мантиссы при этом заполняется нулем, а не очередной значащей цифрой результата перемножения мантисс, с одновременным уменьшением порядка результата на единицу. Для операции же деления может понадобиться сдвиг вправо вместе с увеличением порядка результата на единицу.
Таким образом, у вещественной арифметики есть несколько потенциально опасных особенностей. Все они имеют общее происхождение, а именно, тот факт, что мантисса и порядок в представлении с плавающей запятой занимают фиксированное число разрядов.
Подведем итог всему сказанному о компьютерной вещественной арифметике:
а) уже на стадии записи чисел в компьютер возникают ошибки округления, которые при выполнении арифметических действий нарастают;
б) наличие погрешностей округления приводит к следующему правилу программирования: неразумно сравнивать в программе два вещественных числа на точное равенство (вместо сравнения на равенство правильнее требовать, чтобы модуль разности сравниваемых чисел не превосходил некоторого числа ɛ, соответствующего абсолютной погрешности представления);
в) в результате вычитания возникают недостоверные значащие цифры, которые могут привести к серьезной потере точности или получению неправильного результата;
г) прибавление или вычитание малого числа может никак не сказаться на результате;
д) получение очень больших чисел может вызвать переполнение порядка, а очень малых — отрицательное переполнение, или исчезновение числа (превращение в нуль), это может привести к аварийному завершению программы.
Вопросы.
1. Запишите следующие десятичные числа в нормализованном виде:
а) 217,934; в) 10,0101; б) 75321; г) 0,00200450.
2. Приведите к нормализованному виду следующие числа, используя в качестве Р основания их систем счисления:
3. Сравните следующие числа:
а) 318,4785 × 10 9 и 3,184785 × 10 11 ;
б) 218,4785 × 10 -3 и 21847,85 × 10 -4 ;
4. Сравните диапазон представления чисел с плавающей запятой в 32-разрядном формате (24 разряда для мантиссы и 6 разрядов для модуля порядка) с диапазоном представления чисел с фиксированной запятой в том же формате.
5. Каковы преимущества компьютерного представления чисел с плавающей запятой по сравнению с их представлением с фиксированной запятой, которое мы чаще всего используем в повседневной жизни?
6. Произведите следующие арифметические действия над десятичными нормализованными числами согласно праилам вещественной компьютерной арифметики (в мантиссе должно быть сохранено 6 значащих цифр):
а) 0,397621 х 10 3 + 0,237900 х 10 1 ;
б) 0,982563 х 10 2 — 0,745623 х 10 2 ;
в) 0,235001 х 10 2 • 0,850000 х 10 3 ;
г) 0,117800 х Ю 2 : 0,235600 х 10 3 .
При выполнении этого задания следует нормализовать мантиссу результата соответствующего арифметического действия, а затем округлить ее
7. Выполните действие над машинными кодами чисел с плавающей запятой в 32-разрядном формате: X =А + В, где А = 125,75 и В = -50.
8. Перечислите и объясните все ошибки, которые могут возникать при арифметических операциях с нормализованными числами в ограниченном числе разрядов.
Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право.
Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам.
ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между.
Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.).
ГДЗ Информатика 10 класс Семакин §5 Представление чисел в компьютере
Дискретное счётное множество представляет собой любое конечное множество, которое и так по определению дискретно. Ограничено оно потому, память и так сама по себе квантирована и не бесконечна. Можно представить память неограниченной. Но адресное пространство не может быть большим до бесконечности. То есть компьютер работает только с ограниченной разрядной сеткой.
2. Определите диапазон целых чисел, хранящихся в 1 байте памяти в двух вариантах: со знаком и без знака.
1 байт это 8 бит соответственно в нем может хранится 2^8 = 256 значений
если в нем хранить числа без знака, то мы сможем записать 256 неотрицательных чисел это числа от 0 до 255
если же со знаком, то тогда половина диапазона будет отрицательным, а половина неотрицательным поэтому будет 256 / 2 = 128 отрицательных чисел и столько же неотрицательных поэтому получится диапазон от -128 до 127
3. Получите внутреннее представление числа 157 в 8-разрядной ячейке памяти в формате со знаком.
Число 157 в 8-разрядной ячейке памяти в формате со знаком представить невозможно, так как максимальное положительное число, которое умещается в 8 разрядов — это 127. 7 разрядов занимает собственно число и 1 разряд — знак.
4. Получите внутреннее представление числа -157 в 8-разрядной ячейке памяти в формате со знаком.
Число -157 в 8-разрядной ячейке памяти в формате со знаком представить невозможно, так как максимальное отрицательное число, которое умещается в 8 разрядов — это -128.
5. Почему множество действительных (вещественных) чисел, представимых в памяти компьютера, дискретно, конечно и ограничено?
Дискретное счётное множество представляет собой любое конечное множество, которое и так по определению дискретно. Ограничено оно потому, память и так сама по себе квантирована и не бесконечна. Можно представить память неограниченной. Но адресное пространство не может быть большим до бесконечности. То есть компьютер работает только с ограниченной разрядной сеткой.
6. На какие две части делится число в формате с плаваю щ ей запятой?