Языки программирования. Практический сравнительный анализ


Языки программирования. Практический сравнительный анализ - стр. 240


В Аде абстракция (единство) обеспечивается понятием модельных чисел, а конкретизация (гибкость) - понятием безопасных и допустимых чисел.

Совокупность модельных чисел каждого подтипа полностью фиксируется на машинно-независимом уровне (т.е. семантикой языка и применяемым программистом объявлением).

Безопасные числа - это некоторое надмножество модельных чисел, а допустимые числа - надмножество безопасных. Оба эти надмножества зависят от конкретной реализации.

Гибкость модели проявляется в том, что расчеты программируются и оцениваются с помощью модельных чисел, а выполняются с допустимыми числами.

Понятие безопасных чисел, отличных от модельных, нужно только для определения исключительных ситуаций (например, переполнения). Пока результаты операций попадают в диапазон безопасных чисел, исключительные ситуации возникать не должны. Таким образом, при переносе в другую вычислительную среду эффект выполнения расчетов может быть другим за счет исключительных ситуаций, если безопасные числа в этих средах отличаются.

Итак, с одной стороны, все реализации ориентированы на единую "систему координат" - модельные числа; с другой стороны каждая реализация работает со своими допустимыми числами.

 

4.15.5. Правила программирования набора модельных чисел. Пример

Пусть, например, объявлен тип

    type скорость is digits 8;

После ключевого слова digits указан спецификатор D (равный в нашем случае восьми), определяющий набор модельных чисел типа "скорость" по следующим (единым для всех реализаций) правилам.

Во-первых, вычисляется количество В двоичных цифр, обеспечивающих ту же относительную погрешность, что и D десятичных цифр.

В общем случае

     В = [ D * log(10)/log(2) + 1 ]        

  (т.е. D - это способ указать В).

В нашем случае  В = [ 8 * 3,3 + 1 ] = 27.

Набор (фактически - диапазон) модельных чисел определяется как совокупность всех чисел, представимых в виде

     знак * мантисса * (2 ** порядок)

где знак - это +1 или -1, мантисса - правильная двоичная дробь, записанная ровно B двоичными цифрами, первая из которых - 1 (т.е.


- Начало -  - Назад -  - Вперед -