Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2010, 13:02   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Обратные тригонометрические функции

Просмотрел много источников, но во всех пишут по-разному насчёт существования арктангенса и арккотангенса для любых чисел.
Вообще, правильно ли будет сделать так(или нет?)
Код:
Function ArcSin(X:Variant):Variant;stdcall;
Var T:Variant;
Begin
       If (X>=-1) and (X<=1) Then
       Begin
             T:=Arctan(x/(sqrt(1-sqr(x))));
             ArcSin:=RadToDeg(T);
       End;
End;

Function ArcCos(X:Variant):Variant;stdcall;
Var T:Variant;
Begin
      If (X>=-1) and (X<=1) Then
      Begin
            T:=2*Arctan(sqrt((1-x)/(1+x)));
            ArcCos:=RadToDeg(T);
      End;
End;

Function ArcTg(X:Variant):Variant;stdcall;
Begin
      If X<>0 Then
      ArcTg:=ArcSin(X)/ArcCos(X)
      Else ArcTg:=0;
End;

Function ArcCtg(X:Variant):Variant;stdcall;
Begin
       If Arctg(X)<>0 Then
       ArcCtg:=1/ArcTg(X)
       Else 
       ArcCtg:=0;
End;
      
End;
Если нет, прошу меня поправить.
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.09.2010, 13:23   #2
GBAXA
Пользователь
 
Аватар для GBAXA
 
Регистрация: 06.05.2010
Сообщений: 73
По умолчанию

Чем не удовлетворяет модуль math
GBAXA вне форума Ответить с цитированием
Старый 03.09.2010, 14:32   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Он мне вообще не нравится. Хочу свой. Ну так правильно или нет?
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.09.2010, 15:00   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А по калькулятору проверить что мешает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 15:06   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

В калькуляторе нету ctg..Ну спасибо всем блин..Ладно, можете закрывать тему.Толку нет.
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.09.2010, 15:21   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тему я закрывать не буду, а тебе посоветую проверять свои функции на практике:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses    math,
  SysUtils;
  
Function ArcSin(X:Extended):Extended;stdcall;
Var T:Extended;
Begin
       If (X>=-1) and (X<=1) Then
       Begin
             T:=Arctan(x/(sqrt(1-sqr(x))));
             ArcSin:=RadToDeg(T);
       End;
End;

Function ArcCos(X:Extended):Extended;stdcall;
Var T:Extended;
Begin
      If (X>=-1) and (X<=1) Then
      Begin
            T:=2*Arctan(sqrt((1-x)/(1+x)));
            ArcCos:=RadToDeg(T);
      End;
End;

Function ArcTg(X:Extended):Extended;stdcall;
Begin
      If X<>0 Then
      ArcTg:=ArcSin(X)/ArcCos(X)
      Else ArcTg:=0;
End;

Function ArcCtg(X:Extended):Extended;stdcall;
Begin
       If Arctg(X)<>0 Then
       ArcCtg:=1/ArcTg(X)
       Else 
       ArcCtg:=0;
End;
var e:extended;
begin
 e:=0.2;
 writeln(math.ArcSin(e):10:5,#9,ArcSin(e):10:5);
 writeln(math.ArcCos(e):10:5,#9,ArcCos(e):10:5);
 writeln(math.ArcTan2(e,1):10:5,#9,ArcTg(e):10:5);
 writeln(math.ArcCot(e):10:5,#9,ArcCtg(e):10:5);
  { TODO -oUser -cConsole Main : Insert code here }
  readln;
end.
И делать выводы правильно или не правильно вместо того чтоб обижаться на других без причины.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 15:30   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Видите ли, дело не в практике, а в том, что я так и не понял:
Цитата:
насчёт существования арктангенса и арккотангенса для любых чисел.
Цитата:
чтоб обижаться на других без причины.
А причина есть:
Цитата:
Если нет, прошу меня поправить.
А никто этого не сделал.
_-Re@l-_ вне форума Ответить с цитированием
Старый 03.09.2010, 15:35   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тангенс и соответственно котангенс могут принимать значения от минус бесконечности до плюс бесконечности, значит арктангенс и арккотангенс существуют там же.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.09.2010, 15:39   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Тригонометрические функции, возвращающие вариантный тип данных в градусах, да ещё с ветвлениями и лишними операциями деления? Мсье знает толк в извращениях Арккосинус, например, во всём цивилизованном мире вычисляют так:

Код:
function ArcTan2(Y, X: Extended): Extended;
asm
    FLD     Y
    FLD     X
    FPATAN
    FWAIT
end;

ArcCos = ArcTan2(sqrt(1-X*X), X);
пыщь
JTG вне форума Ответить с цитированием
Старый 03.09.2010, 15:42   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А никто этого не сделал.
Я (Тоесть мы).
Во-первых:
Цитата:
Function ArcSin(X:Variant):Variant;stdcall;
Для чего ты Variant используешь и зачем stdcall?

Во-вторых:ArcSin и ArcCos твои работают верно. Только я бы в них не делал перевод в градусы.

В-третьих: Любопытно выглядит связка:
Цитата:
ArcTg:=ArcSin(X)/ArcCos(X)
Учитывая что вызываются твои функции, которые все равно вызывают стандартную функцию модуля System.
Назревает опять вопрос - зачем изобретать велик? Изобретал бы его тогда уже на ассемблере.
Не буду разводить флуд, просто порекомендую залезть в исходники делфийских модулей и поучится у Борланда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тригонометрические функции в Delphi _-Re@l-_ Общие вопросы Delphi 4 13.05.2010 16:25
Не работают правильно тригонометрические функции Cookson Помощь студентам 2 02.02.2010 13:21
Подскажите как записать обратные тригонометрические функции на паскале....)))) Polo Паскаль, Turbo Pascal, PascalABC.NET 2 04.11.2008 11:05
тригонометрические , логарифмические, экспоненциальные функции Dimon88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.09.2008 01:38
Обратные тригонометрические функции Melok Паскаль, Turbo Pascal, PascalABC.NET 6 24.10.2007 13:06