Программирование в среде Турбо Паскаль (Поляков, Круглов) - страница 116

| >until ( r < 1 );

| > sq := Sqrt( -2 * Ln(r)/r);

| > Gauss := mo + Sigma*a*sq

| END;


Рис. 9.7

Функцию Gauss несложно модифицировать, чтобы она возвращала целые значения.

9.4.3. Оптимизация сложения и вычитания

Процедуры Inc и Dec (аналогичные названия имеют команды ассемблера) введены в язык для оптимизации операций сложения и вычитания целых чисел. При компиляции Inc(i) даст более эффективный и быстрый код, чем традиционное i := i + 1. Выигрыш составит до 30%, что очень важно при использовании в циклических процессах.

9.5. Использование математического сопроцессора 80X87


Применение сопроцессора значительно увеличивает точность математических расчетов и ускоряет их выполнение. Дело лишь в малом — наличии его и умении использовать.

- 181 -

Чтобы программа могла задействовать возможности сопроцессора, она должна в своем начале иметь директиву (ключ режима компилятора) $N+ :

{$N+ программа для 80X87}

PROGRAM Name;

USES

...

Режим компиляции $N+ является глобальным и не может меняться в дальнейшем. При создании модулей (UNIT), ориентированных на работу с сопроцессором, т.е. использующих вводимые им типы, указание ключа $N+ в них необязательно. Важно лишь, чтобы он был в главной программе, включающей в себя эти модули.

При необходимости отключить сопроцессор должен указываться ключ $N-. При этом программа может перестать компилироваться (компилятор «забудет» типы чисел с повышенной точностью).

Если в ПЭВМ установлен сопроцессор, то компилятор сам определяет ключевое слово CPU87 для условной компиляции. Это можно использовать для автоматического выбора режима компиляции:

{$IFDEF CPU87} {$N+} {$ELSE} {$N-} {$ENDIF}

Приведенная выше конструкция определяет, как будет скомпилирован текст — в расчете на сопроцессор или без него.

После компиляции выполнение программы всякий раз начинается с проверки наличия сопроцессора и определения его типа. Результат проверки записывается в предопределенную переменную системной библиотеки — Test8087 типа Byte (табл. 9.8).

Таблица 9.8

Значения Test8087

Расшифровка

0

Сопроцессор не обнаружен

1

Подключен 8087

2

Подключен 80287

3

Подключен 80387

Если программа компилировалась в режиме {$N+}, а значение Test8087 получилось равным 0, то программа остановится с выдачей сообщения о необходимости сопроцессора. Существует, однако, средство отключить автоматическую проверку наличия сопроцессора при запуске программы. Надо ввести системную переменную MS-DOS с именем 87 и значениями Y (от YES — да) и N (от NO — нет). Лучше всего это сделать в файле AUTOEXEC.BAT, вставив строку