Помогите с поиском ошибки (delphi)

Компьютеры программирование Образование Delphi делфи

Задача: Вычислить сумму при К от 1 до бесконечности х^К/2К!

Вот листинг программы:
procedure TForm1.Button1Click(Sender: TObject);
var x,s,n,sum,chislit,znamen:real;
k,i,f:integer;
begin
x:=strtofloat(Edit1.Text);
k:=1;
sum:=0;
repeat

s:=1;
for i:=1 to k do
s:=s*x;
chislit:=s;

f:=1;
for i:=1 to k do
f:=f*i;
znamen:=2*f;

n:=chislit/znamen;
k:=k+1;
sum:=sum+n;
until n<0.000001;
edit2.text:=floattostr(sum);
end;

PS: При определенных значениях (больше 8) выдает отрицательные значения, при введенных положительных.

Примечание:
Нет, даже при объявлении s и chislit как double при значениях выше восьми результат начинает принимать отрицательные значения
Ответы:
Прочитай ВНИМАТЕЛЬНО какое максимальное значение влезает в real при полной точности... Для твоей цели и double то не всегда хватит.
не надо отдельно вычислять числитель и знаменатель - меньше шансов переполнения:
var
 x, s, sum: Extended;
 k, i: Integer;
begin
 x := StrToFloat(Edit1.Text);
 k := 1;
 sum := 0;
 repeat
   s := 1;
   for i := 1 to k do
     s := s * x / i;
   k := k + 1;
   s := s / 2;
   sum := sum + s;
 until Abs(s) < 0.000001;// Abs для корректного вычисления при отрицательных Х
 Edit2.Text := FloatToStr(sum);
 ShowMessage(FloatToStr((Exp(x) - 1) / 2));//результат можно проверить по формуле (Exp(x) - 1) / 2
end;


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.