ВычисОшибокКОМПx - Высшая школа экономики

advertisement
Пояснение к 1 заданию Практикума на ЭВМ для групп САВВАТЕЕВА В.В.
(ПИ-11, ПИ-12, ФИ-12)
В первых двух модулях (а возможно, и до конца учебного года) Практикум по кафедре Высшей математики
будет проходить на основе пакета EXCEL. Из школьного курса информатики будут использоваться только самые
простые разделы работы с EXCEL (занесение чисел, текста и формул, выделение области, копирование и сортировка
данных, построение простейших графиков кривых типа y = x^2 +6*x - 8). Если в школе почему-либо не было EXCEL
или вы его подзабыли, можно позаниматься самостоятельно во второй половине дня (когда закончатся занятия по
расписанию) в дисплейных классах на МП, обратившись для этого к дежурным около ауд . ДК251 и ДК252.
***
Задание1. Первое, с чем надо разобраться при работе с компьютером – это может ли компьютер совершать
ошибки в процессе вычислений (конечно, может!), почему эти ошибки возникают, если даже студент всё делал
правильно, могут ли эти ошибки накапливаться (могут!), и как устранить ошибки или, по крайней мере, сделать их
приемлемыми (то есть малыми) по величине. Для знакомства с этим разработано задание «ВЫЧИСЛЕНИЕ ОШИБОК
КОМПЬЮТЕРА». Обратите внимание, что компьютер НЕ МОЖЕТ сам исправить свои ошибки, и это должны сделать
вы (производя некоторые вспомогательные вычисления в своей рабочей тетради ). Для примера мы рассмотрим
вычисление степеней двойки: 1 (нулевая степень), 2 (первая), 4 (вторая), и так далее. Чтобы сделать это в EXCEL,
настроим первый столбец (он должен быть помечен буквой А) на формат ячейки «ЧИСЛОВОЙ», с «КОЛИЧЕСТВОМ
ЗНАКОВ», равным нулю (ибо любая степень двойки является натуральным числом и, стало быть, десятичных знаков не
содержит). Затем в ячейку А1 занесем 1, а в ячейку А2 занесём формулу =А1*2 . Копируя эту формулу сверху вниз, мы
будем получать всё новые натуральные степени двойки, причем абсолютно правильно (то есть ошибка компьютера =0).
Однако с некоторого места начнутся неприятности. А именно, скоро мы увидим, что число 2 49 окачивается четырьмя
цифрами … 1312 (и это верно), а затем число 2 50 оканчивается цифрами … 2620 (что никак не может быть верным).
В самом деле, если какое-то натуральное число кончается нулём, то оно делится на 5. А как же может делиться на 5
число, полученное путём перемножения пятидесяти двоек? Дальше – ещё хуже. Степени двоек начинают оканчиваться
двумя нулями (стало быть, они делятся на 25?!), затем тремя нулями, а такое, к примеру, незатейливое число, как 2 100
оканчивается почему-то 16-ю нулями (а ненулевых цифр у него только 15; вот они: 126765060022823 ). Итак, при
попытке посчитать число 2100 компьютер «потерял» 16 цифр из имеющихся в нём (а их имеется 31). Как же исправить
такую грубую (да ещё накапливающуюся) ошибку компьютера?
Начнём с того, что исправим неверное число 250. Оно получается из верного числа 249 (окачивающегося
цифрами … 1312) умножением на два, поэтому 250 должно оканчиваться не цифрами … 2620, а цифрами … 2624, так
как 1312*2=2624. ПРЕДУПРЕЖДЕНИЕ. Не всегда всё бывает так просто, как в этом случае. Допустим, какая-нибудь
другая степень двойки кончалась бы не цифрами …1312, а цифрами …7313. Тогда следующая степень двойки
кончалась бы цифрами … 4626, а компьютер сообщил бы нам, что она кончается цифрами …4630 (подумайте,
почему?). Образованные студенты могут возразить, что никакая натуральная степень двойки не может кончаться на 3.
Да, это так… но в домашнем задании вам могут встретиться не только степени двойки!
Итак, компьютер «полагает», что 250 = 1125899906842620, а мы теперь знаем, что 250 = 1125899906842624.
Так давайте исправим ошибку компьютера и вместо неправильного числа запишем в эту ячейку правильное. И
вот тут вы увидите, что компьютер не только заблуждается, но и упорствует в своих заблуждениях. Он отказывается
делать поправку и снова даёт нам неправильное число! Придётся нам все исправленные нами числа хранить только в
своей тетради – ведь компьютер с этими поправками никогда не согласится. КСТАТИ: записи в вашей рабочей тетради
регулярно будут проверяться преподавателем с выставлением 10-балльной оценки. А потом она повлияет на так
называемую «накопленную оценку».
Последнюю цифру неправильного числа (в отличие от предпоследней или ещё более ранней) можно исправить
и другим способом. Проследим за тем, как меняется последняя цифра натуральных степеней двойки: 2, 4, 8, 16, 32,
64, … . Уловили, какая тут закономерность? Периодически повторяются четыре цифры: 2,4,8,6, 2,4,8,6, 2,4,8,6 и так
далее. Значит, после последней цифры «2» обязательно должна идти последняя цифра «4».
Теперь сформулируем в общем виде первое домашнее задание по 1-му занятию (после сделанных разъяснений
уже будет понятно, как его выполнять). Каждому студенту выдаётся конкретное число N ( 5 < N < 50), не делящееся
на 10 и не являющееся степенью двойки. Вычисляются последовательные натуральные степени этого числа N, N2,N3,
… , Nk до тех пор, пока не встретится число Nk+1такое, что в нём впервые компьютер ошибается. Обратите внимание, что теперь не исключены такие хитрые случаи, что последняя цифра ВЕРНАЯ, а предпоследняя – НЕТ. Компьютер ошибается из-за того, что в выделенной ему для изображения целых чисел разрядной сетке такое большое число
не помещается, и он автоматически переходит к изображению данного числа в виде «мантиссы и порядка», которое
имеет гораздо больший диапазон, но намного меньшую точность (и при этом последняя значащая цифра округляется
с учётом отбрасываемого «хвоста» десятичных цифр). Например, число 6799, 5667при округлении до целых даёт
6800.Значит, возможен случай, когда при первой ошибке компьютера в числе Nk+1 даже третья от конца цифра будет
неверной! Требуется определить абсолютную величину ошибки, допускаемую компьютером, и в какую сторону она
допущена: в сторону завышения истинного числа, или в сторону его занижения. И всё это надо сделать не для степени
Nk+1, а для следующей степени (то есть Nk+2). Слово «мантисса» в школе должно было изучаться ДВАЖДЫ: при
изучении логарифмов и при изучении информатики. Если Вы не знаете, что оно означает, посмотрите это в интернете (например, в поисковой системе GOOGLE.com).
А мы теперь займёмся более сложной, но необязательной задачей: как, зная точно число 250 , найти ТОЧНО число 2100.
Рассмотрим два числа М и К, из которых состоит запись числа 2 50 : М = 11258999 (старшие цифры), К = 06842624
(младшие цифры). Ноль в начале числа К можно не писать (и мы далее не будем этого делать). Легко понять, что тогда
верно равенство 250 = М*108 + К. Кроме того, очевидно, что 2100 = (250)2. Осталось вычислить БЕЗ ОШИБОК число
(М*108 + К)2 . Но это число равно М2*1016 + 2*М*К*108 + К2. Каждое из чисел М2, 2*М*К , К2 компьютер способен
вычислить без ошибок, но сложить их (с учётом сдвига первого числа на 16 десятичных разрядов влево, а второго – на 8
разрядов) все три вместе НЕ СМОЖЕТ, так как в итоге получится слишком большое число. Зато мы сможем сделать это
в своей рабочей тетради: выписать все три числа в столбик с учётом сдвига влево М2 и 2*М*К и сложить. Компьютер
посчитал следующее: М2 = 126765058482001; 2*М*Т = 154082193546752; К2 = 46821503205376. Занесём эти числа со
сдвигом на 16, 8 и 0 разрядов влево в нашу рабочую тетрадь (см. таблицу внизу).
1
2
6
7
6
5
0
5
8
1
4
5
8
4
2
0
0
8
0
2
1
1
9
3
5
4
4
6
6
8
7
2
5
1
2
5
0
3
2
0
5
3
7
6
Сложив столбиком эти три числа, мы и получим 2100 без всяких ошибок. В частности, последние 4 цифры этого
числа равны не 0000 (как нам «подсказывал» компьютер), а 5376. Если кто-нибудь из вас собирается после бакалавриата ещё и в магистратуру, можете в домашнем задании наряду с числом Nk+2 уточнить также и число (Nk+2)2. Но
больше 10 баллов вы всё равно за эту задачу не получите. Но по «гамбургскому счёту» за это можно было бы назначить
и 15 баллов. (Что такое «гамбургский счёт», посмотрите в интернете).
Download