Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.10.2011, 17:59
Аватар для Kpyc
Kpyc Kpyc вне форума
Новичок
 
Регистрация: 05.05.2011
Сообщения: 75
Версия Delphi: Turbo Delphi
Репутация: 11
Плохо Проблема с power

Код:
function Xi(n: integer): extended;
begin
  Result := (m - n + 1) * power(x, n) / fact(n);
end;
При х=0 и n=0 выдает в ответе не 0. Трассировкой выяснил, что проблема в этой функции, m и x описаны глобально. Подскажите, где я натупил?
Ответить с цитированием
  #2  
Старый 23.10.2011, 18:36
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Так при положительном m >=n и не будет никогда 0. А вообще дайте конкретные значения всех переменных и что ожидается в ответе, тогда и будем разбираться
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 23.10.2011, 18:41
Аватар для Kpyc
Kpyc Kpyc вне форума
Новичок
 
Регистрация: 05.05.2011
Сообщения: 75
Версия Delphi: Turbo Delphi
Репутация: 11
По умолчанию

Должен же быть 0 всегда при х=0. Поэтому все выражение должно обращаться в него же, а у меня, например, при m = 4, n = 0, x = 0 выдает ответ 5, т.е. пауэр возвращает 1..
Вот полный код:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

const
  eps = 0.001;

var
  x: extended;
  m: integer;

function Virajenie: extended;
begin
  result := power(1 + x, m);
end;

function Fact(n: integer): integer;
begin
  if n > 1
    then Fact := n * Fact(n - 1)
    else Fact := 1;
end;

function Xi(n: integer): extended;
begin
  Result := (m - n + 1) * power(x, n) / fact(n);
end;

function Ryad: extended;
var
  n: integer;
  buf: extended;

begin
  n := 0;
  Result := 0;
  repeat
    buf := Xi(n);
    writeln('x[',n,'] = ', buf:6:4);
    Result := Result + buf;
    inc(n);
  until abs(xi(n) - xi(n - 1)) < eps;

begin
  write('M = ');
  readln(m);
  x := 0;
  writeln('Virajenie = ', Virajenie:6:4);
  writeln('Ryad = ', Ryad:6:4);
  readln;
end.

Последний раз редактировалось Kpyc, 23.10.2011 в 18:51.
Ответить с цитированием
  #4  
Старый 23.10.2011, 18:52
chainik chainik вне форума
Начинающий
 
Регистрация: 30.06.2008
Сообщения: 140
Репутация: 8882
По умолчанию

и правильно!
любое число в нулевой степени даст 1

Но надо еще помнить что power вычисляет степень через логарифмирование
поэтому например power(-4,1.5) даст ошибку.
Ответить с цитированием
  #5  
Старый 23.10.2011, 18:59
Аватар для Kpyc
Kpyc Kpyc вне форума
Новичок
 
Регистрация: 05.05.2011
Сообщения: 75
Версия Delphi: Turbo Delphi
Репутация: 11
По умолчанию

Ок, мне надо для x:[-0.6;0.5] доказать тождество:
(1+x)^m = 1 + mx + m (m - 1) x^2 / 2! + ... + m (m-1) ... (m - n + 1) x^n / n! + ....
Выдает уж очень разные числа, в чем может быть причина? Думал проблема в этом, а раз нет, то в чем?
UPD тему можно закрывать, проблема была в неверном разложении в ряд.

Последний раз редактировалось Kpyc, 24.10.2011 в 16:19.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025