Ниче не понимаю пачиму ошибку переполнения выдает(((
Пасмарите плиз:
Используя оператор цикла, найти сумму элементов!При определении суммы членов ряда использовать реккурентную формулу.
Найти сумму ряда с точностью Е=10^-3 , общий член которого равен An=n!/(3n^n).
Вот текст моей программки:
CONST
i=0.1E-2;
var
n: integer;
AN, summa:extended;
begin
summa:=0; n:= 1; AN:= 1/2;
while AN>i do
begin
summa:= summa + AN; n:=n+1;
AN:= An*(ln(n+1)*((n+1)/n));
end;
writeln ( 'summa=', summa:2:4);
Writeln ('4islo=', AN:2:4);
readln;
end.
Я не вникал, но переполнение возникает из-за того что AN изначально больше i и оно не убывает, а даже шустро возрастает во время исполнения программы.
Добавлено:
я не считал сумму этого ряда, но эта программа должна работать правильно:
arhimag, а прочтение условий что, НЕ для тебя?
Ты правда считаешь, что 3n^n и (3n)^n - это одно и то же?
Про рекуррентную формулу я забыл
а по поводу возражения мисс граффити, то я думал что там (3n)^n, но этот глюк исправлен.
Рекуррентная формула:
A(n+1)=(n+1)!/(3(n+1)^(n+1))=n!*(n+1)/(3*(n+1)^n*(n+1))=n!/(3(n+1)^n)
A(n)=n!/(3n^n)
A(n+1)=A(n)*(n^n)/((n+1)^n)=A(n)*(n/(n+1))^n
У меня так получилось...
а откуда взялось
мисс_граффити
у меня рекурентка получилась An*(n+1)^(n+1)/n
может я тоже чтот неправильно посчитал?
Добавлено:
тьфу...т.е An*((n+1)/n)^(n+1)
напиши, как выводил
Мисс Графити,извиняюсь..я у себя ошибку нашел,немного не так считал...ты правильно вывела...но вот только если писать A(n)*(n/(n+1))^n,то Паскаль всеравно перевыполнение выдает,но вот если An*((ln(n)*n)/(ln(n)*(n+1))),то все нормс считает!Спасибо всем за помощь...все дело в рекуррентке было.
считает-то нормально, только совсем другое ))
Почему???там ведь при выводе рекуррентки и в числителе в степени N,так и в знаменателе N!почему ошибка то?
Ты думаешь, что ln(n)*n=n^n?
А почему?
Возьмем для примера число е (чтобы проще было считать).
ln(e)*e=1*e=e
Это совсем не то, что e^e, правда?
хм...а вот так прральна буит?An*(exp(ln(n)*n))/(exp(ln(n)*(n+1))))
да... но так ты приходишь к варианту arhimagа.
причем у него переполнение будет возникать с меньшей степенью вероятности: он сначала считает n/(n+1), а потом это число (заведомо меньше 1) возводит в степень. ты же по отдельности считаешь n^n и n^(n+1) и только после этого делишь. вот переполнение и вылезает.
Я щя проверил,мой вариант...переполнения не возникает.