Математические пакеты символьной математики, к которым относится и DERIVE, выполняют алгебраические преобразования с заранее задаваемой абсолютной точностью без применения «правильного» округления, то есть ненужные разряды просто отсекаются. Установка всех характеристик чисел: основания системы счисления, точности вычислений, количества разрядов и способа представления выводимых чисел, осуществляются в пунктах меню:
Declare Þ Algebra State Þ Input…:| Output…:| Simplification…:
Для моделирования вычислений с плавающей точкой нужно определить специальную функцию. В данном методическом материале для определения (программирования) функций будут использоваться операторы пакета DERIVE версий 4.02 под Windows.
С помощью операторного блока Ini для операций с плавающей точкой будем устанавливать точность вычислений (25 разрядов) в режиме ‘»’ (Approximate), которая должна быть заведомо большей, чем точность представления мантиссы (6 разрядов), максимальное число разрядов обрабатываемых данных º=25 и относительную погрешность «=0.000001.
Для перехода к числу с плавающей точкой необходимо оценить порядок исходного числа, сдвинуть его на число разрядов, равное порядку, ограничить разрядность дробной части до погрешности « с применением правильного округления и, наконец, восстановить порядок числа. Перечисленные действия реализуются следующими операторами:
-6
#1: Ini:= PrecisionDigits:=25,º:=25,«:=10
#2: Ifp(N,V):=IF(FLOOR(ABS(N)/10^V1)1,V1+1,-V1)
#3: Pp(N):=MAX(ITERATES([V1+1,Ifp(N,V)],V,[0,0],º)`2)
#4: Ifn(N,V):=IF(FLOOR(ABS(N)·10^V1)1,V1+1,-V1)
#5: Pn(N):=MIN(ITERATES([V1+1,Ifn(N,V)],V,[0,0],º)`2)
#6: p(N):=IF(¦N¦>1,Pp(N),Pn(N))
#7: Zn(N):=10^p(N)·«·FLOOR(N/(10^p(N)·«)+1/2)
Оператор #3 вычисляет порядок Pp(N) числа N, которое больше или равно единице. Для этого оператором ITERATES() в первой компоненте вектора V формируется натуральный ряд целых чисел от 0 до º , а во второй – модуль числа N, который, делится на соответствующую степень десяти, понижая порядок целой части. Строка с #2 контролирует понижение этого порядка, записывая во вторую компоненту вектора V очередное целое со знаком ‘+’, пока целая часть не нуль, и со знаком ‘-’ , когда целая часть станет равной нулю. Функция MAX() в операторе #3 выделяет из множества вторых компонент вектора V максимальное целое число, которое и является положительным порядком. Аналогично происходит и выделение функцией MIN() отрицательного порядка в строчках с номерами 4 и5.
Оператор #6 оба процесса выделения порядка объединяет в единый.
Последняя строчка восстанавливает порядок числа, ограничивает разрядность дробной части и выполняет округление. Исполняемым оператором является функция Zn(N), в которой аргумент N есть выражение, значение которого представляется в форме с плавающей точкой и шестью правильно округленными значащими разрядами. Например, пусть определены два операнда a и b:
a:=-12.9456789 Zn(a) Þ -12.9457
b:=-0.123456789 Zn(b) Þ -0.123457
a·b Þ1.5982319484190521 Zn(a·b)Þ 1.59823
Zn(a)·Zn(b)Þ1.5982372849Zn(Zn(a)·Zn(b))Þ1.59824
Любая арифметическая операция с операндами в системе плавающей точки вносит погрешность в результат, изменение которого можно представить дополнительным сомножителем вида ®=(1+«), где « – относительная погрешность, определяемая ограниченностью разрядной сетки для мантиссы числа. Поэтому, в точных символьных преобразованиях исходных выражений в конечное символьное выражение для вычислений, каждая алгебраическая операция должна домножаться на переменную ® , что даст возможность оценить абсолютную и относительную погрешности конкретной последовательности вычислений (алгоритма).
Рекуррентные формулы для построения двух векторов X(n),Y(n) с (n+1)-й компонентой, которые учитывают внесение дополнительной погрешности (1+«), представим следующими процедурами:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.