Рекуррентные вычисления суммы ряда с вещественными числами icon

Рекуррентные вычисления суммы ряда с вещественными числами


Скачать 49.39 Kb.
НазваниеРекуррентные вычисления суммы ряда с вещественными числами
Размер49.39 Kb.
ТипДокументы


  1. РЕКУРРЕНТНЫЕ ВЫЧИСЛЕНИЯ СУММЫ РЯДА

С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ




    1. Цель, требования и рекомендации к выполнению задания



Цель выполнения задания: изучение и практическое освоение приемов программирования на языке Паскаль циклических вычислительных процессов с неизвестным количеством повторений на примере решения задачи вычисления приближения суммы бесконечного ряда.


Требования и рекомендации к выполнению задания:

1) выбрать в качестве исходных данных для программы вещественные числа:

а) значение аргумента x;

б) значение ();

2) подобрать исходные данные, выявляющие особенности вычислений с плавающей точкой. Опробовать вычисления с различными вещественными типами (Single, Real, Double, Extended). При выборе исходных данных и анализе результатов учитывать значение машинного эпсилон для данного типа;

3) при построении математической модели данной задачи необходимо:

а) определить способ вычисления значения очередного слагаемого, при этом предпочтителен способ, использующий рекуррентное соотношение;

б) определить способ вычисления частичной суммы;

в) определить условие окончания суммирования;

4) при разработке алгоритма выбрать способ вычисления значения очередного слагаемого, содержащий минимальное количество умножений.


Сведения о конструкциях языка, алгоритме:

  • использование переменных вещественного типа;

  • применение циклов с неизвестным количеством повторений.
^

    1. Общая схема решения задачи



В разд. 2 уже рассматривалась задача рекуррентного вычисления суммы слагаемых, которые, в свою очередь, также вычислялись рекуррентно. Рассмотрим в общем виде аналогичную задачу с вещественными числами.

Пусть задана последовательность членов ряда u0u1, …, un … . Рассмотрим последовательность частичных сумм S0S1, …, Sn, …, где

Si = j = 0...i uj. (3.1)

Если , то говорят, что ряд сходится и записывают это в виде

S = j = 0...∞ uj. (3.2)

Рассмотрим задачу приближенного вычисления суммы ряда, т. е. вычисления некоторой частичной суммы (3.1), где номер последнего слагаемого n определяется дополнительным требованием. Например, при заданном (обычно малом) числе номер n может быть определен неявно соотношением n = min{i > 0 : |ui| ≤ }.

Иначе говоря, для всех , |ui| > , а n — номер последнего слагаемого в частичной сумме и . Очевидно, что соотношение |ui| >  можно использовать как условие продолжения цикла вычисления суммы ряда.

Если слагаемые можно вычислить рекуррентно: , то схема вычисления частичной суммы ряда может быть такой:

{ i:=0 }

s:=s0; u:=u0;

while B(s,u,) do

{(s=S(i)) & (u=u(i)) & (i
begin

{ i:=i+1 }

u:=f(u);

s:=s+u

{(s=S(i)) & (u=u(i)) & (i≤n)}

end {s=S(n) & u=u(n) & not B(s, u, )}

Здесь использована общая форма условия продолжения цикла (B(s, u, ) — предикат от переменных s, u, ). Кроме того, вычисление номера слагаемого i “спрятано” в комментарии и в явном виде не производится. В комментариях используется также “переменная-призрак” n — количество слагаемых, входящих в частичную сумму.


3.3. Общая формулировка задания


Заданы вещественные и . Пользуясь разложением известной функции f(x) в бесконечный ряд f(x) = Σi = 0...∞ ui(x) вычислить частичную сумму Sn(x) = Σi = 0...n ui(x), номер n последнего слагаемого частичной суммы, абсолютную и относительную ошибки приближения значения функции f(x) частичной суммой:

an(x) = |f(x) – Sn(x)|; rn(x) = an(x) / |f(x)|.

Функция f(x), область D сходимости ряда и разложение в ряд (формула для слагаемого) заданы в каждом из индивидуальных заданий. Последний номер в шифре задания определяет одно из условий окончания суммирования:

  1. n = min{i > 0: |ui(x)| ≤ ε};

  2. n = min{i > 0: |ui(x)| ≤ ε |Si(x)|}.



    1. ^

      Пример выполнения задания



Пример: Вычислить частичную сумму сходящегося бесконечного ряда разложения функции, f(x) = sin(x) = Σ= 0...∞ (–1)ix2+ 1/ (2i + 1)!, , т.е. D = [–, +].

Математическая модель:

  • рекуррентное соотношение для вычисления очередного элемента ряда: ui + 1 = (–x2/(2i + 2)(2i + 3))ui; С целью дальнейшего снижения вычислительной сложности в программе предлагается вычислять значение выражения –x2/(2+ 2)(2i + 3), которое также производится по рекуррентным соотношениям: ui = (–x2/di)u– 1; ; ; ; ; d0 = 0; dd0 = –2.

  • , , ;

  • суммирование следует прекратить при .


{ Лабораторная работа 3: Вычисление суммы ряда }

{ Для заданных epsil : (0..1) и x вычисляется

S(n;x) = Sum (i:0..n) u(i;x),

где u(i;x) = (-)^i* x^(2i+1)/(2i+1)!

и n = Min [ k>=0 : Abs(u(k;x)) <= epsil ] }

type MyReal = Single;

var x, {аргумент }

epsil, {точность }

s, {частичная сумма }

u, {слагаемое}

ss, r,

w : MyReal;

p : Byte; {параметр точности для epsil}

d,dd : Integer;

i : Integer;

fout : Text;

{ Далее при записи утверждений использованы обозначения:

s(i) = Sum (j:0..i) u(j) ,

u(j) = (-)^j * x^(2j+1)/(2j+1)! .

Вычисления производятся по рекуррентным соотношениям :

u(i) = u(i-1)*(-x*x)/d(i);

d(i) = 2i(2i+1); d(i) = d(i-1) + dd(i);

dd(i)= 8i-2; dd(i) = dd(i-1) + 8; }

{======================================================= }

begin

Assign(fout,'sinSngl2.dat');

Rewrite(fout);

WriteLn(fout,'Лабораторная работа 3: Вычисление суммы ряда');

WriteLn('=====Лабораторная работа 3: Вычисление суммы ряда=====');

Write(fout,'Тип: Single. ');

Write( 'Тип: Single. ');

Write('Epsilon = 10^(-p); Введите p (p>0):'); ReadLn(p);

epsil := exp(-p*ln(10.0)); {Epsil = 10^(-p)}

Write(fout,'Epsilon = ',epsil:10);

WriteLn( 'Epsilon = ',epsil:10);

Write('Введите значение аргумента x=');

ReadLn(x);

Write('Введено значение аргумента x=',x :10:7,' (Enter):');

Writeln(fout,' x = ',x:10:7);

ReadLn;

{ ------------------------------ }

{Вычисления по заданным x и Epsil:}

i := 0;

dd := -2; d := 0;

u := x; s := x;

w := -x*x;

{s=s(i) & u=u(i) & i=0}

WriteLn( 'Слагаемое t(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

WriteLn(fout, 'Слагаемое u(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

{ ------------------------------ }

while Abs(u) > epsil do

begin { s=s(i) & u=u(i) & d=d(i) & dd=dd(i) & i
i := i + 1;

dd := dd + 8;

d := d + dd;

u := u * w / d;

s := s + u;

WriteLn( 'Слагаемое u(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

WriteLn(fout, 'Слагаемое u(',i:3,')= ',u:16,' сумма S(',i:3,')= ',s :16 );

{ s=s(i) & u=u(i) & d=d(i) & dd=dd(i) & i<=n }

end {while};

{ s = s(n) & u=u(n) }


{Вывод результатов:}

WriteLn(fout,'Номер последнего слагаемого n=',i:4);

WriteLn( 'Номер последнего слагаемого n=',i:4);

ss:=Sin(x);

WriteLn(fout,'Стандартная ф-ия Sin x =',ss:16);

WriteLn( 'Стандартная ф-ия Sin x =',ss:16);

WriteLn(fout,'Сумма S(x) =',s :16);

WriteLn( 'Сумма S(x) =',s :16);

r:=abs(s-ss);

WriteLn(fout,'Абсолютная погрешность r(x) =',r :16);

WriteLn( 'Абсолютная погрешность r(x) =',r :16);

WriteLn(fout,'Параметр точности Epsilon =',epsil :16);

WriteLn( 'Параметр точности Epsilon =',epsil :16);

Close(fout);

end.

Таблица 3.1

Лабораторная работа 3: Вычисление суммы ряда

Тип: Single. Epsilon = 1.0E-0006 x = 5.0000000

Слагаемое u(  0) = 5.0000000E+0000 сумма  S(  0) = 5.0000000E+0000

Слагаемое u(  1) = –2.0833334E+0001 сумма  S(  1) = –1.5833334E+0001

Слагаемое u(  2) = 2.6041668E+0001 сумма  S(  2) = 1.0208334E+0001

Слагаемое u(  3) = –1.5500993E+0001 сумма  S(  3) = –5.2926588E+0000

Слагаемое u(  4) = 5.3822889E+0000 сумма  S(  4) = 8.9630127E–0002

Слагаемое u(  5) = –1.2232475E+0000 сумма  S(  5) = –1.1336174E+0000

Слагаемое u(  6) = 1.9603325E–0001 сумма  S(  6) = –9.3758416E–0001

Слагаемое u(  7) = –2.3337292E–0002 сумма  S(  7) = –9.6092147E–0001

Слагаемое u(  8) = 2.1449716E–0003 сумма  S(  8) = –9.5877647E–0001

Слагаемое u(  9) = –1.5679617E–0004 сумма  S(  9) = –9.5893329E–0001

Слагаемое u(10) = 9.3331055E–0006 сумма  S( 10) = –9.5892394E–0001

Слагаемое u(11) = –4.6112180E–0007 сумма  S( 11) = –9.5892441E–0001

Номер последнего слагаемого n=  11

Стандартная ф–ия     Sin x = –9.5892429E–0001

Сумма                  S(x)  = –9.5892441E–0001

Абсолютная погрешность r(x) = 1.1920929E–0007

Параметр точности Epsilon = 1.0000000E–0006

Результаты работы программы приведены в табл. 3. 1 (текстовый файл sinSngl2.dat).

    1. Задания


Рассматриваются ряды f(x) = Σi = 0...∞ ui. Для каждого индивидуального задания определены вид элемента ряда ui, функция , область сходимости D, если D ≠ R.

1. u(i) = (–1)ix2i / (2i)!; f(x) = cos(x).

2. u(i) = xi / i!; f(x) = exp(x).

3. u(i) = (1/sqrt(2π))(–1)nx2n + 1/(2nn!(2+ 1)); f(x) = Φ(x) – “функция ошибок” [10, с.46].

4. u(i) = (–1)ix2i / i! ; f(x) = exp(–x2).

5. u(i) = xi (i + 1) / i! ; f(x) = exp(x)(1 + x).

6. u(i) = x3i / (3i)! ; f(x) = (1/3)exp(x) + 2exp(–x/2)cos(x sqrt(3)/2).

7. u(i) = x3i + q / (3i + q)! ; q = 1, 2;
f(x) = (1/3)exp(x) – (2/3)exp(–x/2)cos(sqrt(3)/2–(π/3)(–1)q).

8. u(i) = qi x4i / (4i)!; q = +1,–1 ;
f(x) = (1/2)(ch(x) + cos(x)); при q = +1 ;
f(x) = cos(/ sqrt(2)) ch(/ sqrt(2)); при q = –1.

9. u(i) = x4i + 1 / (4+ 1)!; f(x) = (1/2)(sh(x) + sin(x)).

10. u(i) = x4i + 3 / (4+ 3)!; f(x) = (1/2)(sh(x) – sin(x)).

11. u(i) = (–1)i 22i x4i / (4i)! ; i ≥ 1; f(x) = ch(x) sin(x) – 1.

12. u(i) = (–1)i + 122i – 1x4i – 2 / (4i – 2)!; i ≥ 1; f(x) = sh(x) cos(x).

13. u(i) = 22ix2i + 1 / (2i + 1)!; i ≥ 1; f(x) = x – sh(x) sin(x).

14. u(i) = (–1)i + 1 22i – 1x2i / (2i)!; i ≥ 1; f(x) = sin2(x).

15. u(i) = (–1)i(2– 1)! x2i / 22i /(i!)2 ; i ≥ 1;
f(x) = ln 2 – ln(1 + sqrt(1 + x2)); x2 ≤ 1.

16. u(i) = (–1)i22i – 1(i – 1)! i! x2i + 1/(2i + 1)!; i ≥ 1;
f(x) = x – sqrt(1 + x2) ln(x + sqrt(1 + x2)); x< 1.

17. u(i) = (–1)i22i(i!)2x2+ 1 / (2+ 1)!;
f(x) = ln(x + sqrt(1 + x2)) / sqrt(1 + x2); x< 1.

18. u(i) = (–1)i(2i – 1)! / 22i – 1 / i! / (i – 1)! / (2+ 1) / x2+ 1; i ≥ 1;
f(x) = ln(1 + sqrt(1 + x2)) – ln(x) – 1/x; x2 ≥ 1.

19. u(i) = (2i)! x2i + 1 / 22i / (i!)2 / (2i + 1); f(x) = arcsin(x); x2 < 1.

20. u(i) = 22i (i!)2 x 2i + 1/ (2i + 1)! / (i + 1); f(x) = arcsin2(x); x2  ≤ 1.

21. u(i) = (2i)! / 22i / (i!)2 / (2i + 1) (x2 / (1 + x2))i;
arctg(x) = [x / sqrt(1 + x2)] f(x) ; x2 < ;
для сравнения рассмотреть:

а) u(i) = (–1)i x2i + 1/ (2i + 1); f(x) = arctg(x);  x2  ≤ 1;

б) u(i) = (–1)i / x2i + 1/ (2i + 1); f(x) = π/2 – arctg(x) ; x2  ≥ 1.

22. Вычислить пару функций f1 и f2:

u1(i) = pisin(i·x) / i; i ≥ 1; u2(i) = picos(i·x) / i; i ≥ 1 ;

f1(x) = arctg(sin(x) / (1 – cos(x)));

f2(x) = ln(1 / sqrt(1 – 2pcos(x) + p2)); (0 < x < 2π) & (p2 ≤ 1).

23. Вычислить пару функций f1 и f2:

u1(i) = xisin(i·p)/i! ;  1 ; u2(i) = xicos(i·p) / i! ;  0 ;

f1(x) = exp(cos(p)) sin(sin(p));

f2(x) = exp(x cos(p)) cos(x sin(p)); x2 < 1 .

Примечание. sh(x) = (exp(x) – exp(–x)) / 2;

ch(x) = (exp(x) + exp(–x)) / 2.

    1. ^

      Вычисления с вещественными числами и машинное эпсилон



В большинстве современных ЭВМ вещественные числа представляют в форме с плавающей точкой (floating point). Опуская малосущественные детали, будем считать, что вещественное число x имеет в машине двоичное представление

x = ± (a12–1 + a22–2 + …+ at2t) 2p , (3.3)

где ai{0, 1} при = 1, 2, …, t. Обычно это представление используется в нормализованном виде так, что a= 1 (такое представление единственно).

Число  = ±(a12–1 + a22–2 + …+ at2t) называют мантиссой числа x. Число бит t в каждой реализации фиксировано и называется разрядностью мантиссы. Целое число p в (3.3) называют двоичным порядком. Оно, в свою очередь, также представляется в двоичном виде, и его значения находятся в некотором диапазоне L p U. Система чисел в представлении (3.3) задается параметрами t, L, U и будет обозначаться далее F(t, L, U). Конкретная реализация зависит также от расположения и способа записи мантиссы и двоичного порядка в отведенных ячейках памяти.

Так как мантисса вещественного числа представляет его в усеченном виде (только t двоичных разрядов), а двоичный порядок ограничен диапазоном L...U, то представление с плавающей точкой (3.1) имеет ряд важных особенностей:

  1. Имеется конечное множество положительных чисел, представимых в системе F(t, L, U), а именно 2t  1(U – L + 1). Если учесть отрицательные числа и нуль, то всего имеется 22t  1(U – L + 1) + 1 чисел.

  2. Среди чисел системы F(t, L, U) имеется максимальное по величине число  = (1 – 2t) 2U . Попытка вычислить в системе F(t, L, U) число x >  (или x < –) приводит к ошибке переполнения.

  3. В окрестности нуля имеется зазор, где отсутствуют числа системы F(tLU). Самое маленькое положительное число  = 2L  1. Попытка вычислить в системе F(tLU) число x  0, такое, что |x| < , приводит к ошибке, называемой антипереполнением или исчезновением порядка.

  4. Числа системы F(tLU) на вещественной оси расположены неравно-мерно. При этом отдельные группы чисел (с фиксированным порядком) располагаются равномерно. Например, зазор между числами в интервале 2–1  x < 1 равен 2t. Числа в соседнем справа интервале 1  x < 2 имеют зазор в два раза больший, т. е. 21  t , а числа в соседнем слева интервале 2–2  x < 2–1 – в два раза меньший, т. е. 2–1  t. В общем случае числа в интервале 2 1 x < 2p имеют зазор 2 t. Таким образом, с ростом порядка p растет и зазор между соседними числами системы F(tLU) на вещественной оси. Отсюда следует, что абсолютная ошибка представления числа x числом fl(x) системы чисел F(tLU) есть = |fl(x) – x| и удовлетворяет неравенству x  2p – t при округлении отбрасыванием всех цифр (at + 1, at + 2, …) после at или неравенству x  2 t  1 при округлении к ближайшему числу fl(x). Для характеристики зазора между числами в системе F(tLU) обычно используют параметр  = 21 – t (величину зазора на интервале 1  < 2). Относительная ошибка представления числа x есть (x) = x / |x|. Значение (x) не зависит от интервала и удовлетворяет или неравенству (x)   или неравенству (x)  2–1 соответственно при округлении отбрасыванием или при округлении “к ближайшему”.

В компьютерах на базе микропроцессора Intel 80286 (а также 80386, 80486 и далее) существуют 3 стандартные формы представления чисел с плавающей точкой, а именно:

  1. формат одинарной точности (в Турбо Паскале – тип Single);

  2. формат двойной точности (в Турбо Паскале – тип Double);

  3. формат расширенной точности (в Турбо Паскале – тип Extended).

Стандартный тип Паскаля Real (в Турбо Паскале – тоже Real) предназначен для работы с числами в режиме эмуляции арифметических операций (без использования сопроцессора 80287/387/487. По этой причине использование этого типа в Турбо Паскале менее эффективно (см. [27], с. 100-101).

Типы Single, Double, Real, Extended отличаются параметрами t, L, U и некоторыми особенностями реализации. Характеристики этих типов приведены в табл. 3. 2.


Таблица 3.2

Название типа

Длина,байт

Число явных бит мантиссы

Количество значащих цифр

Диапазон деся-тичного порядка

Single

4

23

7, 8

–45…+38



Extended

10

64

19, 20

–4951…+4932


Следует отметить тот факт, что при нормализованном представлении чисел типов Single, Double, Real старший бит мантиссы a= 1 и в разрядах, отведённых под мантиссу, не хранится. Его называют неявным битом и его наличие учитывается при всех манипуляциях с вещественными числами этих типов. Для типа Extended старший бит a1 хранится в разрядах, отведённых под мантиссу (т. е. у типа Extended неявного бита нет).

Отметим также, что тип Extended предназначен в основном для представления промежуточных результатов, получающихся при вычислении функций с числами типа Double, чтобы упростить получение гарантированных по точности окончательных результатов. Все основные вычисления производятся в формате Extended, а затем результаты округляются до используемого в программе типа Single, Real или Double. Явное использование типа Extended программистом может потребовать от него тщательного анализа точности и надежности результатов.

Обычно в качестве характеристики точности представления вещественных чисел в ЭВМ используют так называемое машинное эпсилон, определяемое как eps = min { : fl( + 1) > 1 }.

Эта величина учитывает особенности реализации системы F(tLU) в конкретном компьютере. Машинное эпсилон может быть вычислено с помощью следующей программы:

{ Вычисление Машинного Эпсилон }

{ Машинное Эпсилон: eps= min [ epsil | 1+epsil>1 ] }

type

MyReal =Single {Real} {Double} {Extended}; {Варианты вещ. типов}

var eps,

epsP1,

epsil,

epsilP1 : MyReal;

i : Integer;

fout : Text;

begin

Assign (fout, 'single.eps'); Rewrite(fout);

{С учетом варианта вещ.типов}

WriteLn(fout,'Вариант вещественного типа: Single');

i := 0;

eps := 1.0;

epsP1 := 2.0;

while epsP1 > 1.0 do

begin {eps=2^(-i) & (1+eps>1)}

eps := eps * 0.5;

epsP1 := eps + 1.0;

i := i + 1;

WriteLn(fout,'<',i:2,'> eps : ', eps,' 1 + eps :', epsP1:26);

{eps=2^(-i) & (1+eps=>1) & (1+2*eps>1}

end {while};

{eps=2^(-i) & (1+eps=1) & (1+2*eps>1}

epsil := 2.0 * eps;

epsilP1 := epsil + 1.0;

WriteLn(fout,'Stop :');

WriteLn(fout,'Эпсилон/2: ', eps,' 1+ эпс/2:', epsP1:26);

WriteLn(fout,'Эпсилон : ',epsil,' 1+ эпс :',epsilP1:26);

WriteLn(fout,'Сравните : 1 + Эпсилон/2(Extended) :', 1.0+eps:26);

Close (fout);

end.


Как правило, при вычислении с вещественными числами для сравнений “с точностью до малой величины” используется не само значение eps машинного эпсилон, а несколько большее, например 2eps, 4eps и т. п.

Таблица 3.3

Результаты вычисления машинного эпсилон

Вариант вещественного типа: Single


< 1> eps : 5.00000000000000E-0001 1 + eps : 1.50000000000000000E+0000

< 2> eps : 2.50000000000000E-0001 1 + eps : 1.25000000000000000E+0000

< 3> eps : 1.25000000000000E-0001 1 + eps : 1.12500000000000000E+0000

< 4> eps : 6.25000000000000E-0002 1 + eps : 1.06250000000000000E+0000

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

<21> eps : 4.76837158203125E-0007 1 + eps : 1.00000047683715820E+0000

<22> eps : 2.38418579101563E-0007 1 + eps : 1.00000023841857910E+0000

<23> eps : 1.19209289550781E-0007 1 + eps : 1.00000011920928955E+0000

<24> eps : 5.96046447753906E-0008 1 + eps : 1.00000000000000000E+0000

Stop :

Эпсилон/2: 5.96046447753906E-0008 1+ эпс/2: 1.00000000000000000E+0000

Эпсилон : 1.19209289550781E-0007 1+ эпс : 1.00000011920928955E+0000

Сравните : 1 + Эпсилон/2(Extended): 1.00000005960464478E+0000


При выполнении задания в качестве параметра точности следует использовать значение, определяемое с помощью eps. Само значение eps для соответствующего типа данных вычисляет приведенная программа.

Например, для типа Single программа дает результаты, приведенные в табл. 3. 3. Проанализировав полученные данные, необходимо дать содержательную интерпретацию результатов.

Модифицировав программу для вычисления eps, можно определить и фактическую разрядность мантиссы (с учётом неявного бита и корректно обращаясь с результатами округления) для каждого из типов Single, Real, Double, Extended. Это осуществляется с помощью следующей программы:

type

Float = Single { Real} {Double} {Extended}; { Change me ! }

var eps,

epsP1,

epsil,

epsilP1 : Float;

i : Integer;

fout : Text;

b1, b2 : Boolean;

begin

Assign (fout, 'eps2Sng5.dat');

Rewrite(fout);

WriteLn(fout,'Single ...'); { Change me ! }

i := 0;

eps := 1.0;

epsP1 := 2.0;

b1 := true;

b2 := true;

while b1 and b2 do

begin

eps := eps * 0.5;

epsP1 := eps + 1.0;

i := i + 1;

b1 := (epsP1 > 1.0);

b2 := (epsP1-eps = 1.0);

WriteLn(fout,'<',i:2,'> eps : ', eps,' 1 + eps :', epsP1:26);

end {while};

epsil := 2.0 * eps;

epsilP1 := epsil + 1.0;

WriteLn(fout,'Stop : b1 =', b1, ' b2 =', b2);

WriteLn(fout,'Stop :: 1 + eps- (в регистрах) :', 1.0+eps:26);

WriteLn(fout,'Stop :: (1 + eps-) - eps- :', epsP1-eps :26);

WriteLn(fout,'Stop :: (1 + eps+) - eps+ :', epsilP1-epsil :26);

Close (fout);

end.


Результаты выполнения программы для типа Single приведены в табл. 3. 4.

Таблица 3.4

Результаты вычисления машинного эпсилон и фактической разрядности мантиссы

Single ...

< 1> eps : 5.00000000000000E-0001 1 + eps : 1.50000000000000000E+0000

< 2> eps : 2.50000000000000E-0001 1 + eps : 1.25000000000000000E+0000

< 3> eps : 1.25000000000000E-0001 1 + eps : 1.12500000000000000E+0000

< 4> eps : 6.25000000000000E-0002 1 + eps : 1.06250000000000000E+0000

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

<21> eps : 4.76837158203125E-0007 1 + eps : 1.00000047683715820E+0000

<22> eps : 2.38418579101563E-0007 1 + eps : 1.00000023841857910E+0000

<23> eps : 1.19209289550781E-0007 1 + eps : 1.00000011920928955E+0000

<24> eps : 5.96046447753906E-0008 1 + eps : 1.00000000000000000E+0000

Stop : b1 =FALSE b2 =FALSE

Stop :: 1 + eps- (в регистрах) : 1.00000005960464478E+0000

Stop :: (1 + eps- ) – eps -: 9.99999940395355225E-0001

Stop :: (1 + eps+) - eps+ : 1.00000000000000000E+0000


В качестве упражнения рекомендуется выполнить эту программу и для остальных вещественных типов, а также проинтерпретировать полученные результаты.


  1. ИСПОЛЬЗОВАНИЕ ПОДПРОГРАММ




    1. Подпрограммы в языке Паскаль. Передача параметров


Язык Паскаль позволяет оформлять фрагменты программы в виде процедур или функций. Это позволяет использовать их для разных наборов входных данных. Вызов для исполнения процедуры или функции производится обращением к ней через ее уникальное имя. Вызов функции может быть составной частью правой части оператора присваивания или любого выражения (арифметического или логического) при условии согласованности типов. Описания процедур и функций должны предшествовать их вызову и располагаются перед началом основной программы. Описания процедур и функций могут быть вложенными друг в друга (внутренние процедуры и функции). Они могут быть вызваны из процедуры или функции, для которой являются непосредственно внутренними, вызвать же их на исполнение из любого другого места программы невозможно.

Описание процедуры имеет следующую структуру:

procedure <имя> (список формальных параметров);

label { Описание локальных меток,}

const { констант, }

type { типов }

var { и переменных }

procedure { Описание внутренних процедур }

function { и функций }

begin

{ операторы }

end;

Описание функции имеет следующую структуру:

function <имя> (список формальных параметров) : тип результата;

label { Описание локальных меток, }

const { констант, }

type { типов }

var { и переменных }

procedure { Описание внутренних процедур }

function { и функций }

begin { операторы, среди которых есть хотя бы один оператор присваивания, в левой части которого стоит переменная, чье имя совпадает с именем функции, а в правой части – результат выполнения функции}

end;

Типом результата в функциях может быть любой из стандартных типов языка Паскаль за исключением файловых типов. Использование определяемых типов не допустимо.

Рассмотрим для текста программы понятия глобальных и локальных имен (меток, констант, типов и переменных). Имена, описанные в основной программе, являются глобальными по отношению к процедурам и функциям, которые описаны после этих имен. Аналогично, имена, описанные в процедурах и функциях, являются глобальными по отношению к внутренним процедурам и функциям, которые в них описаны. Остальные имена называются локальными. Их область действия локализована, т. е. ограничена той процедурой или функцией, в которой они введены.

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

Похожие:

Рекуррентные вычисления суммы ряда с вещественными числами iconРекуррентные вычисления суммы ряда с вещественными числами
Цель выполнения задания: изучение и практическое освоение приемов программирования на языке Паскаль циклических вычислительных процессов...
Рекуррентные вычисления суммы ряда с вещественными числами icon1. Значение функции sin2(X) можно Вычислите с помощью разложения ее в ряд Маклорена Вычислите sin2(X) с точностью eps, т е. вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена ряда не станет меньше eps.
Вычислите sin2(X) с точностью eps, т е вычисление суммы ряда нужно продолжать до тех пор, пока абсолютная величина очередного члена...
Рекуррентные вычисления суммы ряда с вещественными числами iconDouble a, b, c, P; string s, h; //описание переменных
Задачи на ввод и вывод данных, оператор присваивания, арифметические операторы, стандартные функции. Все входные и выходные данные...
Рекуррентные вычисления суммы ряда с вещественными числами iconПравила вычисления предела числового ряда и функции Понятие производной и ее геометрический и экономический смысл Техника дифференцирования простых функций
Суть метода выделения полного квадрата при интегрировании дробно-рациональной функции
Рекуррентные вычисления суммы ряда с вещественными числами iconОперации в языке Visual Basic
Практически все компьютерные программы выполняют обработку числовых данных, например, подсчет общей суммы счета, вычисление величины...
Рекуррентные вычисления суммы ряда с вещественными числами iconnamespace _1 {class mainSummMetod
Разработать собственный класс, содержащий методы для вычисления минимума и максимума из двух чисел, а также метод для вычисления...
Рекуррентные вычисления суммы ряда с вещественными числами iconВыполните вычисления по алгоритму или его фрагменту, заданному блок-схемой. Выпишите подробно все вычисления, приводящие к результату. Словесно опишите алгоритмические структуры, составляющие алгоритм. Указания. 1) Все исходные данные, промежуточные результаты и результаты операций “/” (деление наце
Для тех, кто достаточно хорошо знаком с программированием, допускается составить программу по блок схеме и выполнить вычисления на...
Рекуррентные вычисления суммы ряда с вещественными числами iconВ продаже и на заказ
Существует накопительная система скидок, все суммы ваших покупок фиксируются в тетрадь и нужный для Вас момент на 5% от суммы можно...
Рекуррентные вычисления суммы ряда с вещественными числами iconЗадача эконометрического исследования временного ряда: выявление и количественное выражение его компонент (тенденции, периодичности, случайной компоненты) в целях их использования для прогнозирования будущих значений ряда
Основная задача эконометрического исследования временного ряда: выявление и количественное выражение его компонент (тенденции, периодичности,...
Рекуррентные вычисления суммы ряда с вещественными числами iconВедомость вычисления координат Но-мера точек

Рекуррентные вычисления суммы ряда с вещественными числами icon+: Определитель равен… +
Формула вычисления определителя третьего порядка содержит следующие произведения: …
Вы можете разместить ссылку на наш сайт:
Документы


При копировании материала укажите ссылку ©ignorik.ru 2015

контакты
Документы