В Borland Pascal вы можете
В Borland Pascal вы можете работать с двумя типами чисел - целыми (короткими целыми - Shortint, целыми - Integer, длинными целыми - Longint, целыми длиной в байт - Byte, целыми длиной в слово - Word) и вещественными (вещественными - Real, вещественны- ми одинарной точности - Single, вещественными двойной точности - Double, повышенной точности - Extended, сложными - Comp). Вещест- венные числа называют также числами с плавающей точкой (плавающей запятой). Для облегчения работы с целыми числами создан процессор 8086, но для работы с вещественными числами на этом процессоре затрачивается гораздо больше времени и усилий. Для семейства про- цессоров 8086 предназначено соответствующее семейство вспомога- тельных специализированных процессоров для математических вычис- лений (сопроцессоров) 80x87.
Процессор 80x87 - это специальный сопроцессор для обработки чисел, который может входить в состав вашего компьютера РС. С по- мощью него операции с плавающей точкой выполняются очень быстро. Поэтому если вы собираетесь использовать большой объем вычислений с плавающей точкой, то вам, вероятно, понадобится сопроцессор.
Borland Pascal построен таким образом, что он обеспечивает оптимальное выполнение операций с плавающей точкой независимо от наличия сопроцессора 80x87.
* Для программ, работающих на компьютере РС, независимо от того, оснащен он сопроцессором 80x87 или нет, в Borland Pascal предусмотрено использование вещественных чисел и соответствующая библиотека программ, которые предназначены для выполнения операций с плавающей точкой. Числа вещест- венного типа занимают 6 байт памяти. При этом обеспечива- ется представление чисел в диапазоне от 2.9х10^-39 до 1.7х10^38 с 11-12 значащими цифрами. Программы в библиоте- ке программ для работы с плавающей точкой оптимизированы по скорости и по размеру и используют самые новейшие средства процессора 80x87.
* Если вы пишете программы, использующиеся только на компь- ютерах, оснащенных сопроцессором 80x87, то вы можете ука- зать Borland Pascal на необходимость получения выполняемо- го кода, в котором используется плата процессора 80x87. Это даст вам возможность использования четырех дополни- тельных типов вещественных чисел (одинарной и двойной точ- ности, повышенной точности, сложного типа) и расширенный диапазон представления чисел с плавающей точкой - от 1.9х10^-4951 до 1,1х10^4943 с 19-20 значащими цифрами.
С помощью директивы компилятора $N или параметра меню Options¦Cоmpiler (Параметры¦Компилятор) 80x87/ 80287 можно перек- лючаться между различными моделями генерации кода с плавающей точкой. По умолчанию используется состояние {$N-}. В этом состоя- нии компилятор использует 6-байтовую библиотеку с плавающей точ- кой, что позволяет вам работать только с переменными типа Real. В состоянии {$N+} компилятор генерирует код для сопроцессора 80x87, что дает вам дополнительную точность и доступ к 4 дополнительным вещественным типам.
В Windows при компиляции с режимом числовой обработки, то есть с директивой {$N+}, убедитесь, что в вашей системе можно найти библиотеку эмуляции Windows 8087 - WIN87EM.DLL. Эта библио- тека обеспечивает необходимый интерфейс между сопроцессором 80х87, Windows и вашей прикладной программой. Если сопроцессор 80х87 в вашей системе отсутствует, то библиотека WIN87EM.DLL бу- дет эмулировать его программно. Эмуляция существенно замедляет работу по сравнению с реальным сопроцессором 80х87, но обеспечи- вает выполнение вашей прикладной программы на любой машине.
В реальном или защищенном режиме DOS, даже если у вас нет сопроцессора 8087, вы можете указать Borland Pascal, что нужно включить библиотеку исполняющей системы, которая эмулирует ариф- метический сопроцессор 8087. В случае наличия сопроцессора 8087 он используется. Если сопроцессор отсутствует, его работа эмули- руется библиотекой исполняющей системы (за счет некоторой потери скорости работы программы).
Для разрешения и запрещения эмуляции сопроцессора 8087 ис- пользуются директива компилятора $E и параметр Emulation (Эмуля- ция) меню Options¦Compiler (Параметры¦Компилятор). По умолчанию используется состояние {$E+}. В этом состоянии в программу авто- матически включается полная эмуляция сопроцессора 8087. В состоя- нии {$E-} используется существенно меньшая часть библиотеки с плавающей точкой, а полученный в результате файл .EXE будет рабо- тать только на машинах с сопроцессором 8087.
В приложении Windows директива компилятора $E не действует. Не действует она также в модуле. Более того, если программа ком- пилировалась с директивой {$N-}, а все модули программы компили- ровались с директивой {$N+}, то библиотека исполняющей системы для сопроцессора 8087 не требуется, и директива компилятора $E игнорируется.
Прикладной программе Windows не требуется библиотека испол- няющей системы 80x87. Вместо этого ей нужно поддерживающая библи- отека WIN87EM.DLL, поставляемая с Windows, которая обеспечивает необходимый интерфейс между вашей прикладной программой, Windows и сопроцессором. Таким образом, в Windows даже при наличии в ва- шей системе сопроцессора 80х87 для выполнения программ, скомпили- рованных в состоянии {$N+}, должна присутствовать библиотека эму- ляции WIN87EM.DLL (данная библиотека - это часть Windows, а не Borland Pascal). При отсутствии сопроцессора WIN87EM.DLL будет эмулировать его операции программным путем, что замедляет выпол- нение программы и не гарантирует, что использующая сопроцессор 80x87 программа сможет работать на любой машине.
Когда вы запускаете прикладную программу Windows, cкомпили- рованную в состоянии {$N+}, убедитесь, что она может найти в сис- теме файл WIN87EM.DLL.
Когда вы выполняете компиляцию в режиме кода 80х87 (директи- ва {$N+}), то возвращаемые подпрограммы модуля Systем (Sqrt, Рi, Sin и т.д.) значения представляют собой не вещественные числа, а числа типа Extended (с повышенной точностью).
{$N+}
begin Writeln(Pi); { 3.14159265358979E+0000 } end.
{$N-}
begin Writeln(Pi); { 3.1415926536E+00 } end.
В оставшейся части данной главы обсуждаются специальные воп- росы, касающиеся использования процессора 80x87 в программах Borland Pascal.