Автор: Тарасова Ольга Константиновна, учитель информатики первой квалификационной категории МБОУ «Гимназия №17» города Перми Конспект открытого урока «Представление вещественных чисел в памяти компьютера» 9 класс «Кодирование вещественных чисел» является заключительным разделом в теме «кодирование информации». Длительность – 2 урока (90 минут). Тип урока – введение новой темы. Форма урока – лекция с элементами проблемной беседы. Цель урока: 1. Познакомить учащихся с представлением вещественных чисел в памяти компьютера. 2. Научить определять границы диапазонов значений вещественных чисел различных типов. Техническое оснащение урока: компьютер учителя, проектор, интерактивная доска. Ход урока: 1 этап. Актуализация знаний. На протяжении всего года мы изучали тему «Кодирование информации в памяти компьютера». Давайте вспомним, о кодировании каких видов информации вы уже знаете (ученики: текстовая, графическая, звуковая, числовая). О кодировании каких чисел вы уже знаете? (ученики: целых). Какие еще числа существуют? (ученики: дробные, реальные, рациональные, вещественные). Сегодня мы рассмотрим последний раздел в теме «кодирование информации». Запишите тему урока – «Представление вещественных чисел в памяти компьютера». 2 этап. Основные принципы кодирования вещественных чисел. Любое вещественное число можно представить в виде мантиссы и порядка. А10 = ±М*10±Р Мантисса содержит цифры числа, а порядок указывает, где находится запятая. Для одного и того же вещественного числа существуют различные способы записи. Например, 256.75 = 25.675*101 = 0.25675*103 = 25675*10-2 и т. д. (учитель записывает на доске мантиссу, а ученики с места указывают, какой должен быть порядок). Из-за того, что точку (запятую) можно поставить в любом месте числа изменяя порядок, вещественные числа называют числами с плавающей точкой (запятой). Мы рассмотрим 3 типа вещественных чисел: Real, Single, Double. В любом пособии по программированию можно увидеть следующие диапазоны допустимых значений для этих чисел: Какие вопросы можно сформулировать по содержанию информации, представленной в таблице? 1. Почему значения типов лежат именно в таких диапазонах? 2. Почему в диапазонах не указаны отрицательные числа? 3. Почему в диапазонах не указан ноль? На эти вопросы мы и попытаемся сегодня ответить. Вещественные числа хранятся в памяти компьютера в нормализованном виде: мантисса числа меньше единицы, первая значащая цифра отлична от нуля. Приведем несколько десятичных вещественных чисел к нормализованному виду. Ученикам предлагается слайд презентации, в котором напротив каждого числа необходимо ввести его нормализованный вид, цвет фона окна сигнализирует о правильности ввода. В каком виде вещественные числа хранятся в памяти компьютера? (ученики: в двоичном). Приведем двоичные числа к нормализованному виду. Сравним десятичные и двоичные нормализованные числа. Каким свойством обладают мантиссы этих чисел? (ученики: у двоичного числа первая значащая цифра мантиссы всегда равна 1). Возникает вопрос: зачем хранить значение заведомо известного разряда? Ведь если не хранить первую единицу, то можно увеличить количество разрядов мантиссы на 1. Тогда несколько меняется классическое определение нормализованного вида числа: целая часть в нормализованном двоичном числе равна единице. Ученикам предлагается новый слайд, на котором они нормализуют двоичные числа, пользуясь новым определением. Сформулируем основные принципы кодирования вещественных чисел: 1. Вещественные числа хранятся в памяти компьютера в нормализованном виде, при этом старший разряд, всегда равный 1, не хранится. 2. Представление вещественного числа сводится к хранению мантиссы, порядка и знака числа. 3. Поскольку в двоичной системе счисления старшая цифра мантиссы всегда равна единице, при хранении ее можно отбрасывать. 3 этап. Кодирование вещественных чисел типа REAL. Рассмотрим кодирование вещественных чисел на примере типа REAL. Под хранение числа отводится 6 байтов памяти: 1 бит - под знак, 8 бит – под модифицированный порядок, 39 – под мантиссу. Что означает слово «модифицированный» (ученики: улучшенный, изменённый и т. д.) Выясним причины необходимости хранения измененного порядка. Назовите диапазон целых чисел, который можно закодировать с помощью 8 бит. (Ученики - 0 (00000000)..255 (11111111)). Но при нормализации числа порядок может быть и отрицательным. Давайте вспомним, как хранятся отрицательные целые числа в памяти компьютера (ученики - в дополнительном коде). Здесь используется другой принцип – прибавлять к порядку такое число, чтобы минимальный порядок не был отрицательным. Это число назвали модифицированным числом, и для типа REAL оно равно 129. Т. о., модифицированный порядок = порядок + модифицированное число. Вычислим диапазон изменения порядков с учетом модифицированного числа (ученики: -129..126). На самом деле минимальный порядок равен -128. Как вы думаете, почему? Что произошло, когда мы изменили определение нормализованного числа? Мы потеряли возможность представления в нормализованном виде числа 0. Порядок 00000000 отведен под хранение нуля. Итак, как найти внутреннее представление вещественного числа? Дано число 155,625 (к доске выходит ученик и с помощью учителя находит внутреннее представление числа). 1. Переводим число в 2сс. 155, 62510 = 10011011, 1012 2. Полученное число приводим к нормализованному виду: 1.0011011101*10111 3. Находим модифицированный порядок: Модифицированный порядок = 710+12910 = 13610 = 100010002 4. Выписываем мантиссу и порядок в ячейку памяти с учетом знака числа. 0 0 0 1 1 0 1 1 1 0 1 … 1 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 0 0 0 0 0 1 1.000…*1021-129=0.000…012=1/2128=2.9*10-39 (значение ученики вычисляют с помощью калькулятора). Запишем внутреннее представление максимального числа: 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Восстановим само число: … 1 1 1 1 1 1 1 1 1.1111….*102255-129=2*2126=2127=1.7*1038 (округляем число 1.111…2 в сторону 210, значение вычисляем с помощью калькулятора). Проверим экспериментально полученные результаты с помощью компилятора Turbo Pascal. Первая программа находит 2127 и после запуска выдаёт ошибку переполнения. Почему? (ученики: потому что при нахождении внутреннего представления максимального числа мы осуществили округление в большую сторону, поэтому вышли за диапазон допустимых значений). Во второй программе переполнения не происходит, т. к. полученное на калькуляторе значение мы записали, оставив одну цифру после запятой. Третья программа находит минимальное значение. А в четвёртой программе мы уменьшаем минимальное значение, убрав одну цифру после запятой, и в результате получаем 0. Можно убрать ещё одну цифру – опять 0. Какой вывод можно сделать? Числа, которые меньше минимального, машина воспринимает как ноль (вывод делается учениками). Такие числа называются машинными нулями. Изобразим схематично диапазон значений типа Real. переполнение -1.7e38 машинные нули -2.9e-39 2.9e-39 переполнение 1.7e38 Итак, мы ответили на 3 вопроса: 1. Каким образом получены границы диапазона для типа Real. 2. Значения отрицательных чисел симметричны значениям положительных чисел, относительно нуля. 3. Число ноль кодируется не так, как другие вещественные числа – биты порядка заполняются нулями. При выходе за диапазон допустимых значений мы получаем либо ошибку переполнения, либо машинный ноль. 4 этап. Самостоятельная работа учеников – поиск диапазона значений для чисел типа SINGLE. Ученики, пользуясь планом исследования типа REAL, самостоятельно определяют максимальный и минимальный порядок для типа SINGLE и максимальное и минимальное значение диапазона. Результаты, полученные учениками, отражены на слайде в левой колонке. 5 этап. Проверка результатов учеников. Выводы. - А теперь проверим ваши результаты с помощью программы, которая по внутреннему представлению числа восстанавливает само число и наоборот. Введем внутреннее представление максимального порядка и максимальной мантиссы. Мы видим, что выходит ошибка. На самом деле происходит это потому, что разработчики типа SINGLE максимальный порядок используют как признак переполнения и поэтому максимальным допустимым порядком будет порядок 127 (внутреннее представление – 11111110). Попробуем ввести в программе этот порядок. Получаем максимальное число из диапазона допустимых значений типа SINGLE. Далее с помощью нашей программы определим минимальное значение из диапазона (мы помним, что нулевой порядок в типе REAL отводился под хранение нуля). Число совпадает с тем, которое вы получили, но давайте проверим, что будет, если его начать уменьшать. Мы видим, что в отличие от типа REAL нулевой порядок не даёт нам машинный ноль. Попробуем найти минимальное число с нулевым порядком для типа SINGLE. Так что же на самом деле происходит? А на самом деле разработчики типа SINGLE решили, что числа с нулевым смещённым порядком тоже должны обрабатываться, но уже по-другому. Очень маленькие числа сопроцессор обрабатывает, не нормализуя, поэтому такие числа получили название денормализованных. Найдем самое маленькое число, у которого мантисса равна 0, 000..01 модифицированный порядок равен 0. 23 и 0.000…01*100-127=2-22 *2-127=2-149=1,4е-45 6 этап. Домашнее задание. Кодирование вещественных чисел типа DOUBLE . Под значение типа Double в памяти отводится 64 бита. Старший бит отводится под знак, следующие 11 бит отводятся под порядок, остальные – под мантиссу. Модифицированное число равно 1023. Дома необходимо вычислить диапазон изменения порядков и диапазон допустимых значений для типа Double. Заключение. Несмотря на сложность, данная тема нравится большинству учащихся. Знание данного материала позволит им избежать многих ошибок при работе на компьютере (программирование, работа с электронными таблицами и базами данных). Примеры заданий: 1. Представить число А=0,510 в памяти компьютера в формате single и double 2. Представить число А=0,110 в памяти компьютера в формате single и double 3. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=3F80000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Чему равно значение десятичного числа А? (1) 4. Представить число А=0,310 в памяти компьютера в формате single и double. 5. Представить число А=-410 в памяти компьютера в формате single и double . 6. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=ВF00000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно___0.5 7. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=С040000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно… 8. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=С320000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно… 9. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=432С000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно … 10. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=С32А000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно… 11. Значение А представлено в формате с плавающей точкой в шестнадцатеричной системе счисления А=42F4000016. Тип переменной А – single для языков программирования BASIC и PASCAL. Десятичное значение числа А равно… 12. Будем считать, что в записи вещественного числа с плавающей точкой в ограниченном числе разрядов один разряд отводится под десятичный порядок, и пять разрядов - под десятичную мантиссу. Под знаки порядка и мантиссы отводится по одному разряду. Среди пар вещественных чисел (a и b) выбрать такую пару, что a + b = a? a) 0,25612×103 и 0,13541×10-3 b) 0,25612×102 и 0,13541×10-2 c) 0,25612×10-2 и 0,13541×102 d) 0,25612×103 и 0,13541×10-1 13. Будем считать, что в записи вещественного числа с плавающей точкой в ограниченном числе разрядов один разряд отводится под десятичный порядок, и пять разрядов - под десятичную мантиссу. Под знаки порядка и мантиссы отводится по одному разряду. Среди пар вещественных чисел (a и b) выбрать такую пару, что a + b = a? a) 0,23619×103 и 0,91824×10-1 b) 0,23619×102 и 0,91824×10-2 c) 0,23619×103 и 0,91824×10-3 d) 0,23619×10-2 и 0,91824×102 14. Чему равно значение выражения (1/3*3), если для хранения мантиссы отводится 4 бита? a) 0.9375 b) 0.9925 c) 1.0000 d) 1.1250 Литература - Р. Хершель “Turbo Pascal 4.0/5.0 - “Эксперименты в памяти”, Е. А. Еремин, г. Пермь, журнал «Информатика» Задания: - материалы с сайта «Студенческая школа информатики» - Задания с олимпиады учителей «Профи-край» в Перми.