
506
ГЛАВА 9. СТРУКТУРЫ ДАННЫХ
четырехбитных регистрах и сложение осуществляется при помощи команд
с плавающей точкой. Примечательно, что
Ada
разрешает такое, поскольку
разработчики этого языка были вынуждены следовать требованиям реали-
зации поддержки представления с фиксированной точкой. Решить же про-
блему поддержки вычислений выражений с фиксированной точкой в нота-
ции этого языка не представляется возможным: поскольку литеральные изо-
бражения значений двух вариантов вещественного типа совпадают, нельзя
узнать, какой вид вычислений подходит для того или иного выражения. Если
это узнать можно, то вполне рационально для фиксированных веществен-
ных выражений воспользоваться (точной!) целочисленной арифметикой пу-
тем превращения значений в целые числа (нужно просто умножить число
на соответствующую степень десяти или, что то же, перенести точку вправо
на несколько знаков) с последующим обратным превращением. Так реали-
зуется фиксированная арифметика в языке
FORT
. При использовании веще-
ственных с фиксированной точкой следует четко осознавать, что в результате
вычислений могут появляться переполнения.
Арифметика с плавающей точкой более устойчива к проблеме перепол-
нения. Эта форма вычислений реализуется в оборудовании практически все-
гда (исключения составляют специализированные процессоры). Но точность
вычислений приходится контролировать специально.
В языках вслед за аппаратурой популярна конструкция длинных,или двой-
ной (тройной и т. д.) точности вещественных. Это удобно, когда конкрет-
ный вычислитель действительно обладает соответствующими форматами.
Но если они не предусмотрены, то обычный компилятор просто проигнори-
рует указание кратности длины (в
Алголе-68
прямо предписывается посту-
пать именно так). В результате у программиста сохраняется только иллюзия
повышенной точности вычислений.
Как уже упоминалось, бессмысленно говорить о перечислении всех ве-
щественных значений (для типа с фиксированной точкой это возможно, но
только если его арифметика реализована корректно). Тем не менее, рассма-
тривая задание области значений как пары чисел, максимально и минималь-
но допустимых, можно считать определенным вложение такой области в “аб-
страктное” перечисление-призрак. В этом случае исходный набор операций,
определенный для перечислений, сужается: из него исключаются
succ
и
pred
как противоречащие аксиоме непрерывности.
Для вещественных типов построение новых типов с наследуемым от ро-
дительского типа поведением, но не допускающих неявные приведения, не
менее актуально, чем для типа целых. По этой причине конструкция