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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

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

Вот код(говорят,правильный):
Код:
Uses CRT;
Function MySin(X:Extended):Extended;
Begin
     Asm
     FLD X
     DB $D9,$FE
     FWAIT
     End;
End;
Var
    T,Q:Extended;
Begin
     Clrscr;
     Write('T = ');
     Readln(T);
     Q:=MySin(T*0.0174);
     Write('Q = ',Q:10:2);
     Readln;
End.
Однако, Q при любом Т равно 0. Почему?
_-Re@l-_ вне форума Ответить с цитированием
Старый 18.09.2010, 12:21   #2
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Может потому, что в функции никаких вычислений не происходит?
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс

Последний раз редактировалось Олвин; 18.09.2010 в 12:28.
Олвин вне форума Ответить с цитированием
Старый 18.09.2010, 12:30   #3
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Однако, Q при любом Т равно 0. Почему?
Потому, что из стека (регистра ST(0) ) нужно значение куда-то все-таки извлечь.
HINT: FST/FSTP
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 18.09.2010, 13:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что ты из стека FPU не вибираешь то что вычисленно.
На Делфи это выглядело бы:
Код:
Function MySin(X:Extended):Extended;
var d:Extended;
Begin
     Asm
     FLD X
     DB $D9,$FE
     FWAIT
     FSTp tbyte ptr[d];
     End;
     Result:=d;
End;
А вот как это красивее в опкодах для паскаля описать я не представляю... Нужно же как то адрес вычислить
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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