Опубликован: 16.09.2005 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 4:

Вычисление функций на последовательностях

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >

Значения "минус" и "плюс бесконечность"

Как реализовать воображаемые элементы "минус бесконечность" и "плюс бесконечность" при программировании на конкретных алгоритмических языках, а не на псевдокоде? Вспомним, что компьютер может представлять не все возможные числа, а только их ограниченное подмножество. Поэтому для компьютера существует минимальное и максимальное целое и вещественное числа. В языке Си эти константы записаны в стандартных заголовочных файлах " limits.h " для целочисленных типов и " float.h " для вещественных типов. Для типа int эти константы называются INT_MIN и INT_MAX.

INT_MIN = (-2147483647 - 1)
INT_MAX = 2147483647

Для вещественных типов максимальное и минимальное числа равны по абсолютной величине и отличаются лишь знаками, поэтому специального названия для максимальной по абсолютной величине отрицательной константы не существует. Максимальное число типа float называется FLT_MAX, типа double - DBL_MAX.

FLT_MAX = 3.402823466e+38
DBL_MAX = 1.7976931348623158e+308

Стоит отметить, что через FLT_MIN и DBL_MIN обозначены минимальные положительные числа, а вовсе не максимальные по абсолютной величине отрицательные!

FLT_MIN = 1.175494351e-38
DBL_MIN = 2.2250738585072014e-308
Константа DBL_MAX является нормальным числом, она не равна 
специальному бесконечно большому значению. Использовать бесконечно большое значение опасно, 
т.к. операции с ним могут приводить к ошибкам.

Итак, в качестве значений "минус бесконечность" и "плюс бесконечность" можно использовать константы INT_MIN и INT_MAX для типа int. Для типа double в качестве значений "минус бесконечность" и "плюс бесконечность" можно использовать выражения ( -DBL_MAX ) и DBL_MAX. Не забудьте только при программировании на Си подключить стандартные заголовочные файлы:

#include <limits.h>

для целых типов и

#include <float.h>

для вещественных. Впрочем, вовсе не обязательно помнить названия этих констант и имена стандартных заголовочных файлов. В качестве значения "минус бесконечность" всегда можно использовать произвольное значение, заведомо меньшее, чем любое конкретное число, которое может встретиться в программе. Например, если известно, что программа работает только с неотрицательными числами, то в качестве значения "минус бесконечность" можно использовать произвольное отрицательное число, например, минус единицу. Аналогично, в качестве значения "плюс бесконечность" можно применять любое достаточно большое число. Оно должно быть заведомо больше, чем все конкретные числа, которые могут встретиться в алгоритме. Пусть, например, известно, что в программе могут встретиться вещественные числа не больше миллиона. Тогда в качестве значения "плюс бесконечность" можно использовать константу

1.0e+30

т.е. десять в тридцатой степени. (Можно даже использовать 1.0e+7, т.е. десять миллионов, но не стоит мелочиться.)

Схема Горнера

Рассмотрим еще один важный пример функции на последовательности. Пусть дана последовательность коэффициентов многочлена p(x) по убыванию степеней:

p(x) = a0xn +a1xn-1 + ... + an

Нужно вычислить значение многочлена в точке x = t. Алгоритм, основанный на просмотре последовательности коэффициентов в направлении от старшего к младшему, называется схемой Горнера. Проиллюстрируем его идею на примере многочлена третьей степени:

p(x) = ax3+bx2+cx+d

Его можно представить в виде

p(x) = ((ax+b)x+c)x+d

Для вычисления значения многочлена достаточно трех умножений и трех сложений. В общем случае, многочлен представляется в следующем виде:

p(x) = (...((a0x+a1)x+a2)x+...+an-1)x+an.

Обозначим через pk(x) многочлен k -ой степени, вычисленный по коэффициентам a0, a1, ..., ak:

pk(x) = a0xk + a1xk-1 + ... + ak.

Тогда

pk+1(x) = pk(x)x + ak+1

т.е. при считывании нового коэффициента многочлена надо старое значение многочлена умножить на значение x, а затем прибавить к нему новый коэффициент.

Выпишем алгоритм:

вещ алгоритм схема Горнера(вх: цел n, вещ a[n+1], вещ t)
| дано: n      -- степень многочлена
|       a[n+1] -- массив коэффициентов многочлена по
|                 убыванию степеней
| надо: вычислить значение многочлена в точке t
начало алгоритма
| вещ p; цел i;
| p := 0.0;     // Инициализация значения многочлена
| i := 0;
| цикл пока i <= n
| | p := p * t + a[i]; // Вычисление нового значения по
| |     // старому значению и добавленному коэффициенту
| | i := i + 1;
| конец цикла
| ответ := p;
конец алгоритма
< Лекция 3 || Лекция 4: 1234 || Лекция 5 >
Кирилл Юлаев
Кирилл Юлаев
Федор Антонов
Федор Антонов

Здравствуйте!

Записался на ваш курс, но не понимаю как произвести оплату.

Надо ли писать заявление и, если да, то куда отправлять?

как я получу диплом о профессиональной переподготовке?

Денис Шестериков
Денис Шестериков
Россия
Сергей Мамойленко
Сергей Мамойленко
Россия, Московский государственный институт стали и сплавов (Технологический университет), 2000