Показать сообщение отдельно
Старый 18.01.2011, 10:49   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Shrek, я думаю, такое
Код:
function arccos(x:real):real;
begin
  arccos:=arctan(sqrt(1-sqr(x))/x);
end;
задание функции arccos - "не есть хорошо", и вот почему:
1. При х=0 возникнет ошибка деления на ноль, а должно быть возвращено Pi/2.
2. Как при х=1, так и при х=-1 такая функция вернет arccos(х)=0, в то время как должно быть при x=1 arccos(x)=0, a при x=-1 arccos(x)=Pi.
Могу предложить такой вариант (он "зашит" в мои библиотеки):
Код:
function ArcCos(X:Real):Real;
BEGIN
    IF ROUND(X*10000)=10000 THEN ArcCos:=0 ELSE
    IF ROUND(X*10000)=-10000 THEN ArcCos:=Pi ELSE
    ArcCos:=(Pi/2)-ArcTan(X/SQRT(1-X*X));
END;
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070