|
Новости |
ЗаданиеИсследовать, что произойдёт, если:
Пример 1 Напечатать таблицу значений функции y = Sin(x) на отрезке [0,1] с шагом 0.1 (считать, что при печати на каждое вещественное число отводится по 4 позиции строки). Решение Постановка задачи наталкивает нас на использование цикла с вещественным параметром, но цикл с параметром предполагает использование переменной порядкового типа, а тип Real таковым не является. Сравните решение этой задачи, представленные ниже.
На первый взгляд, работа этих программ должна быть одинаковой, но, запустив программы, мы обнаружим, что первая программа выдает значения функции sin(x) для всех значений х от 0 до 0.9, а вторая программа - для всех значений х от 0 до 1. Почему это происходит? Как вы знаете, вся информация представляется в памяти ЭВМ в виде 0 и 1. Для хранения переменной типа Real в памяти ЭВМ отводится 48 бит (6 байт), которая распределяется следующим образом: Переведём вещественное число 0.1 в двоичную систему, для этого будем умножать число на 2: 0.1 * 2 = 0.2 далее вычисления повторяются. Выписывая подчёркнутые цифры, получим двоичную дробь: 0.110 = 0.0001100110011...2. Можно заметить, что полученная дробь является периодической с повторяющейся 0011. Согласно рис.4, мантисса 00000110011... обрывается после 40 разрядов. Таким образом, получаем приближённое представление вещественного числа. Вернёмся к нашему примеру. Сейчас можем объяснить, почему первая программа работает не так, как нам бы хотелось - это происходит в силу приближённого представления вещественного числа. Поэтому при решении задач следует избегать использования циклов с изменяющейся вещественной переменной. Пример 2 Дано х, принадлежащее интервалу от -1 до 1. Составить программу вычисления бесконечного ряда х - х2/2 + х3/3 -... с заданной точностью Е. Нужная точность считается полученной, если очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число Е (это и все последующие слагаемые учитывать не надо). Решение На первый взгляд программа должна вычислять очередное слагаемое хn/n и прибавлять его к сумме, полученное на предыдущем этапе. При нахождении значения хn можно воспользоваться циклом с параметром, но, с другой стороны, чтобы вычислить значения хn достаточно значение х n-1 (найдено на предыдущем шаге) умножить на х. Вопросы для обсуждения
Итак, решение будет выглядеть следующим образом:
|
На главную страницу(с)Все права защищеныПо всем интересующим вопросам прошу писать на электронный адрес |