Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей



  • Узи сканеры

    Узи сканер купить можно у нас. Любая конфигурация узи сканеры всегда есть в нашей компании.

    www.dealmed.ru



Наличие команд трансцендентных функций значительно усиливает вычислительную
мощность процессора. Результат вычислений таких функций
имеет высокую точность. Необходимо учитывать тот факт, что аргументы
тригонометрических функций задаются в радианах. Если, к примеру, мы
хотим вычислить синус угла А, заданного в градусах, то для перевода в радианы
можно использовать формулу
А Р А Д = А* Р 1 / 180,
где А Р А Д — величина угла в радианах, А — величина угла в градусах.


Теперь пока давайте немного вспомним о том, что такое синус угла и как рассчитать его.
Итак, синусом строго угла прямоугольном треугольнике является отношение противоположного данному острому углу катета к гипотенузе данного треугольника.
Из приведенного ниже примера видно, что синусом угла АЛЬФА является соотношение катета FK к гипотенузе DF.

 

Рассмотрим небольшой пример, в котором будут вычисляться синус и косинус
угла. В качестве каркаса приложения будем использовать консольное
приложение, сгенерированное Мастером приложений Delphi 7. Операторы
ввода-вывода такого приложения позволяют легко манипулировать любыми
типами данных, а это упрощает исходный текст программы. В этом приложении
будем использовать две простейшие команды Delphi — ReadLn и
WriteLn. Первая из этих команд читает ввод с клавиатуры, а вторая выводит
значения на экран. Программа, исходный текст которой приведен в листинге
2.26, довольно проста.

 

Листинг 2.26. Программа, вычисляющая синус и косинус угла
program sincos;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
angle: Single;
angleRad: Single;
Sinus, Cosinus: Single;
procedure SinCos(angle: Single); assembler;
asm
f init
fid DWORD PTR angleRad
fid DWORD PTR angleRad
fsin
fstp DWORD PTR Sinus
fcos
fstp DWORD PTR Cosinus
fwait
end;
begin
Write('Enter degrees: ') ;
ReadLn(angle);
AngleRad := angle*3.14/180;
SinCos(angleRad);
WriteLn('The angle in degrees = angle:5:2);
WriteLn('Sinus of angle = ', Sinus:5:3);
WriteLn('Cosinus of angle = ', Cosinus:5:3);
ReadLn;

 

В программе для вычисления значений синуса и косинуса используется
процедура sinCos на языке ассемблера. Основная программа читает введенные
посредством клавиатуры значения угла и, преобразовав полученное
значение угла в радианы, вызывает процедуру вычисления синуса и косинуса
sinCos. Команды fsin и fcos вычисляют значения синуса и косинуса
угла, находящегося в вершине стека S T ( 0 ) . Команды не имеют операндов и
возвращают результат в том же регистре S T ( 0 ) . Предыдущее значение регистра
(значение угла) теряется после операции вычисления синуса. Вот почему
возникает необходимость выполнения двух команд fid в процедуре!

Среди команд вычисления значений тригонометрических функций есть
fsincos. Эта команда вычисляет синус и косинус угла, находящегося в
вершине стека сопроцессора ST(0). Команда не использует операнды и возвращает
результат в регистрах ST (о) и ST (1) . При этом в ST (о) помещается
значение синуса, а в регистр ST(1) — косинуса. Изменим предыдущий
пример так, чтобы можно было использовать команду fsincos.
Исходный текст программы представлен в листинге 2.27.

 

Листинг 2.27. Программа, вычисляющая синус и косинус угла с помощью
функции FSINCOS V
program cl;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
angle: Integer;
angleRad: Single;
Sinus, Cosinus: Single;
procedure SinCos(angle: Single); assembler;
asm
f init
fid DWORD PTR angleRad
fsincos
fxch st(l)
fstp DWORD PTR Sinus
fstp DWORD PTR Cosinus
fwait
end;
begin
Write('Enter angle in degrees: ' ) ;
ReadLn(angle);
AngleRad := angle*3.14/180;
SinCos(angleRad);
WriteLn('Angle in degrees = ', angle);
WriteLn{'Sinus of angle = ', Sinus:5:3);
WriteLn('Cosinus of angle = ', Cosinus:5:3);
ReadLn;
end.

 


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru