Помощь - Поиск - Пользователи - Календарь
Полная версия: Exp(x)
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
strelec025
Целью решения задачи, приведенной в табл. 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
Цитата
Помогите пожалуйста.
Пожалуйста. Тебе явно не хватает емкости типа Integer, попробуй описать переменную s не как Integer, а как Real, т.е.:
var x, i: integer; s, y: real;
, что получится?

P.S. А по-хорошему надо бы и X описывать как вещественное.
strelec025
Цитата(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
Цитата
1. Зачем X как вещественное?
Потому что областью определения показательной функции ax (ex - ее частный случай) является множество действительных чисел. Понимаешь, действительных, а не целых...

А вообще мне кажется, что твоя задача решается вот так: Как самому написать функцию Exp(x)?

Цитата
Как сделать чтобы считал экспонент, при неположительной степени?
В программе по ссылке нужно кое-что добавить. Подумай, что именно...
strelec025
Я незнаю пока про функции ничего и поэтому строку
Код
function _Exp(x: double): double;
не понял.

А вообще нам нужно решить эту задачу, как раз примерно так как я изначально написал. Ну может попроще как-то если еще возможно.

Добавлено через 9 мин.
Цитата(volvo @ 18.09.2010 18:06) *

...В программе по ссылке нужно кое-что добавить. Подумай, что именно...

а типо логарифм от неположительного числа не существует да?
а как тогда в степень возводить то еще число?
TarasBer
> y:=y+exp(ln(x)*i)/s; {= y+x^i/i!}

Я категорически протестую. Использовать экспоненту для вычисления экспоненты - это не решение, это читерство.
Тогда проще сразу написать exp(x).
x^i считай также, как i!, то есть наращивая в каждой итерации на новый сомножитель.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.