| >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, вставив строку