Десятичная и двоичная целочисленная арифметики часто оказываются очень удобными для выполнения различных вычислительных операций, требующих большой точности и использующих операнды, для которых допустимы представления в виде целых. Однако в некоторых случаях, и в частности при выполнении научных расчетов, приходится жертвовать точностью для обеспечения возможности оперировать с числами, не представленными в виде целых. Например, при решении задач физической химии используется число Авогадро. Оно приблизительно равно 6.023 Х 1023 и выражает количество молекул в грамм-молекуле газа. Заряд электрона равен 1.60210 X10-1 кулонов. Суммарный заряд электронов, находящихся в грамм-молекуле газа, равен произведению этих чисел.
Представление таких чисел в виде целых крайне неудобно. С другой стороны, если все же производить подобные вычисления, используя лишь целочисленную арифметику, то встает новая сложная задача: отслеживание места десятичной точки. Поэтому при выполнении научных расчетов арифметические операции производятся над числами, представленными в форме с плавающей точкой.
Обычно проблемные программы пишутся на таких языках высокого уровня, как FORTRAN или BASIC. Программы, написанные на этих языках, затем транслируются на машинный язык. Для выполнения операций над числами, представленными в форме с плавающей точкой, используются машинные команды арифметики с плавающей точкой. Сведения относительно того, как такие числа представляются и обрабатываются в машине, зачастую оказываются очень полезными при программировании на языках высокого уровня.
Более того, достаточно часто приходится составлять программы на языке ассемблера для обработки данных, состоящих из чисел с плавающей точкой. Подпрограммы, которыми пользуются программисты на языках высокого уровня для перевода, чисел из исходного символьного представления в машинное представление с плавающей точкой и обратно, пишутся на языке ассемблера, так же как, впрочем, и многие другие подпрограммы, например SIN и ABS, используемые для вычисления типовых функций в программах на языке FORTRAN и BASIC.
Хороший проблемный программист всегда в состоянии использовать язык ассемблера либо для составления собственных программ, предназначенных для вычисления значений функций, не предусмотренных в языках высокого уровня или в соответствующих библиотеках компиляторов, либо для повышения эффективности работы уже существующих программ при решении его задачи.
Команды арифметики с плавающей точкой предназначены для выполнения операций над числами, слишком большими для представления в виде целых. При этом автоматически учитывается положение десятичной точки. В машинах фирмы IBM числа с плавающей точкой представляются в виде знакового бита, 7-битовой характеристики, значение которой на 6410 превышает значение порядка, и 24-, 56- или 112-битовой мантиссы. Длина мантиссы зависит от выбранного формата записи числа с плавающей точкой. Формат числа с плавающей точкой может быть в зависимости от длины мантиссы коротким, длинным и расширенным (см. рис. 19.1).
В табл. 19.3 приведен стандартный набор команд обработки чисел с плавающей точкой. Используя расширенные числа, можно добиться большей точности вычислений. Команды обработки расширенных чисел приведены в табл. 19.4.
Таблица 19.3 Команды с плавающей точкой одинарной и двойной точности
Таблица 19.4 Команды расширенной точности
При выполнении различного рода преобразований чисел из одних форматов в другие целые и дробные части, что следует из программ, приведенных на рис. 19.5 и 19.8, обрабатываются отдельно.