Целью решения задачи, приведенной в табл. 3, является вычисле- ние заданной функции с некоторой погрешностью EPS путем вычисле- ний указанного бесконечного ряда. Величину EPS изменять в диапазоне 0,01..0,00001 пpи одном значении аpгумента. Для проверки правильности вычислений сpавнить значение полученной суммы pяда со значением библиотечной функции.
Я какбы написал программу, которая сравнивает числа с точностью до сотых, но вот при x=1 и x=2 проблем не возникает, а как x=3 у меня выходит ошибка то что на ноль делить нельзя. Помогите пожалуйста.
var s,x,i:integer; y:real; begin writeln('BBeDuTe cTeIIeHb EkcIIoHeHTa'); readln(x); y:=1+x; {na4alo funkcii} i:=1; {stavim stepen 4isla x=1} s:=1; {factorial = 1} repeat i:=i+1; {yveli4ivaem stepen 4isla x} s:=s*i; {vi4islyaem factorial do i! } y:=y+exp(ln(x)*i)/s; {= y+x^i/i!} until trunc(y*100)=trunc(exp(x)*100); {sravnivayem 2 cifri posle zapyatoi y 4isel} writeln('y= ',y); {vivodim priblizhenoe zna4enie s to4nost'u do sotih} writeln('exp(x)= ',exp(x)); {vivodim funkciu E^x} readln end.
Автор: volvo 18.09.2010 20:32
Цитата
Помогите пожалуйста.
Пожалуйста. Тебе явно не хватает емкости типа Integer, попробуй описать переменную s не как Integer, а как Real, т.е.:
var x, i: integer; s, y: real;
, что получится?
P.S. А по-хорошему надо бы и X описывать как вещественное.
Автор: strelec025 18.09.2010 20:38
Цитата(volvo @ 18.09.2010 17:32)
Пожалуйста. Тебе явно не хватает емкости типа Integer, попробуй описать переменную s не как Integer, а как Real, т.е.:
var x, i: integer; s, y: real;
, что получится?
P.S. А по-хорошему надо бы и X описывать как вещественное.
О, спасибо. Теперь заработало. Ну теперь у меня еще 2 вопроса есть: 1. Зачем X как вещественное? 2. Как сделать чтобы считал экспонент, при неположительной степени?
Автор: volvo 18.09.2010 21:06
Цитата
1. Зачем X как вещественное?
Потому что областью определения показательной функции ax (ex - ее частный случай) является множество действительных чисел. Понимаешь, действительных, а не целых...
А вообще мне кажется, что твоя задача решается вот так: http://volvo71.narod.ru/faq_folder/math.htm#taylor_exp
Цитата
Как сделать чтобы считал экспонент, при неположительной степени?
В программе по ссылке нужно кое-что добавить. Подумай, что именно...
Автор: strelec025 18.09.2010 21:18
Я незнаю пока про функции ничего и поэтому строку
Код
function _Exp(x: double): double;
не понял.
А вообще нам нужно решить эту задачу, как раз примерно так как я изначально написал. Ну может попроще как-то если еще возможно.
Добавлено через 9 мин.
Цитата(volvo @ 18.09.2010 18:06)
...В программе по ссылке нужно кое-что добавить. Подумай, что именно...
а типо логарифм от неположительного числа не существует да? а как тогда в степень возводить то еще число?
Автор: TarasBer 23.09.2010 23:19
> y:=y+exp(ln(x)*i)/s; {= y+x^i/i!}
Я категорически протестую. Использовать экспоненту для вычисления экспоненты - это не решение, это читерство. Тогда проще сразу написать exp(x). x^i считай также, как i!, то есть наращивая в каждой итерации на новый сомножитель.