IPB
ЛогинПароль:

> Вычисления. Модуль Math
klem4
сообщение 19.10.2006 8:38
Сообщение #1


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Охх ничего с утра опнять не могу. Почему вылетает программа при X = 0 ?

{$mode objfpc}

uses Math, Crt;

var

x: Double = 0;
c: array [0..4] of Double = (-1, -1, 0, 2, 1);

function F: Double;
var
i: Integer;
begin
result := 0;
for i := Length( c ) - 1 downto 0 do
result := result + Power(x, i) * c[i];
end;

begin
clrscr;
writeln(F:2:2);
readln;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
klem4
сообщение 19.10.2006 8:49
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


В общем ошибка при Power(0, ...)

Чтож придется делать проверку перед возведением.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.10.2006 9:04
Сообщение #3


Гость






Цитата(rtl.pdf)
17.12.53 power
Synopsis: Return real power.
Declaration: function power(base: float;exponent: float) : float
Visibility: default
Description: power raises base to the power power. This is equivalent to exp(power*ln(base)).


Чему равен Ln(0), можно полюбопытствовать?
 К началу страницы 
+ Ответить 
klem4
сообщение 19.10.2006 9:16
Сообщение #4


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Все ясно, спасибо.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 19.10.2006 13:00
Сообщение #5


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Как же тогда допускается такое ?!

uses crt, math;
begin

clrscr;

writeln(Power(-2, 2):2:1); // выводится 4
writeln(Power(-2, 3):2:1); // выводится -8

readln;
end.


Выходит Ln(-2) ?!!!!

:mega_chok: :blink:


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.10.2006 14:13
Сообщение #6


Гость






Посмотри на реализацию Power (файл math.pp):
function power(base,exponent : float) : float;

begin
if Exponent=0.0 then
if base <> 0.0 then
result:=1.0
else
InvalidArgument
else if (base=0.0) and (exponent>0.0) then
result:=0.0
else if (abs(exponent)<=maxint) and (frac(exponent)=0.0) then
result:=intpower(base,trunc(exponent))
else if base>0.0 then
result:=exp(exponent * ln (base))
else
InvalidArgument;
end;


(InvalidArgument как раз и бросает Exception)... Видишь, что произойдет, если дробная часть экспоненты ненулевая? Исключение выброшено не будет... А попробуй
  writeln(Power(-2, 2.5) : 2 : 1);
smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 17:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"