Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 180

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 174 175 176 177 178 179 < 180 > 181 182 183 184 185 186 .. 316 >> Следующая

type MyFloat is digits 10 range 0..1000; - область фиксирована,
- число значащих цифр =10
type MyFixed is delta 0.01 range 0..1000; - область фиксирована,
- числа различимы с агом 0.01
За счет подобных описаний можно добиться передачи программе сведений о точности представления вещественных чисел, но, однако, это не гарантирует от оибок вычислений и их накапливания. апример, оператор X_Fixed_1 := 1.1 +2.1 + 3.1;
(X_Fixed_1 — переменная, описанная как фиксированная с одной значащей цифрой после десятичной точки) может вызвать ошибку в 'гарантированном' дельтой знаке, если внутреннее представление чисел реализуется на
506
9.
четрехбитнх регистрах и сло ение осуествляется при помои команд с плавающей точкой. Примечательно, что Ada разрешает такое, поскольку разработчики этого язка были вну ден следовать требованиям реализации поддерки представления с фиксированной точкой. Реить е проблему поддерки вычислений вра ений с фиксированной точкой в нотации этого языка не представляется возмо ным: поскольку литеральне изображения значений двух вариантов вещественного типа совпадают, нельзя узнать, какой вид вычислений подходит для того или иного выражения. Если это узнать мо но, то вполне рационально для фиксированных веествен-ных выражений воспользоваться (точной!) целочисленной арифметикой путем превраения значений в целые числа (ну но просто умно ить число на соответствующую степень десяти или, что то же, перенести точку вправо на несколько знаков) с последующим обратным превращением. Так реализуется фиксированная арифметика в языке FORT. При использовании вещественных с фиксированной точкой следует четко осознавать, что в результате вычислений могут появляться переполнения.
Арифметика с плавающей точкой более устойчива к проблеме переполнения. Эта форма вычислений реализуется в оборудовании практически всегда (искл чения составля т специализированне процессор ). о точность вычислений приходится контролировать специально.
язках вслед за аппаратурой популярна конструкция длиннх, или двойной (тройной и т. д.) точности вещественных. Это удобно, когда конкретный вычислитель действительно обладает соответствующими форматами.
о если они не предусмотрен , то обычный компилятор просто проигнорирует указание кратности длины (в Алголе-68 прямо предписывается поступать именно так). В результате у программиста сохраняется только иллзия повенной точности вычислений.
Как уже упоминалось, бессмысленно говорить о перечислении всех ве-
ественнх значений (для типа с фиксированной точкой это возмо но, но только если его арифметика реализована корректно). Тем не менее, рассматривая задание области значений как пар чисел, максимально и минимально допустимых, мо но считать определенным вло ение такой области в "абстрактное" перечисление-призрак. В этом случае исходный набор операций, определенный для перечислений, сужается: из него исключаются succ и pred как противоречаие аксиоме непрервности.
ля веественных типов построение новых типов с наследуемым от родительского типа поведением, но не допускаих неявные приведения, не менее актуально, чем для типа целых. По этой причине конструкция
9.2. БАЗОВЫЕ И ВЫВОДИМЫЕ ТИПЫ
507
type MyNewT is new T;
в языке Ада играет наиболее важную роль, когда T — один из веществен-нх типов или его подтипов на дает возмо ность программисту осуе-ствлять контролируемое компилятором "разделение мер", фигурирующих в содерательной задаче Таким образом, имеет место удобное и недорогое средство дополнительного контроля очему это средство редко встретиь в практических языках? Во многом это объясняется традициями, но не только они причина. К примеру, для С/С++ с его концепцией приведений просто нет места для так называемх "новых" типов, которые все равно останутся полность эквивалентнми свои базовм типам. В этом плане некоторые дополнительные средства контроля предоставля тся в рамках методологии объектно-ориентированного программирования.
Что касается абстрактно-синтаксической структуры выводимых типов, то в качестве примера рассмотрим рис. 9.1, на котором в приведена конструк-
Тип = int
Тип = отрезок int і---range---.
first
last
10
a) b)
Рис. 9.1. О писание выводимого типа
ция <Переменной>, имеющей в качестве значения атрибута <Тип> один из встроенных типов (а), и <Переменной> выводимого типа (b). Таким образом, здесь развивается лиь ветвь, соответствуая атрибутам типа.
В ходе обработки описания при вчислении конструктора достраивается ветвь атрибутов компоненты, а при обработке обращения (к переменной,
508
9.
процедуре и т. п.) она используется. В этих случаях достаточно заранее построенных шаблонов добавляемых ветвей.
§ 9.3. СТРУКТУРНЫЕ ТИПЫ
С абстрактной точки зрения структура рассмотренных в предыдущем разделе типов не суествует. Это означает, что их битовое представление во всех нормальнх случаях игнорируется: ни одна операция в разумно устроенном язке не дает доступ к отдельным битам этого представления. Впрочем, с этой точки зрения есть смысл проанализировать так называемый ма-инно-ориентированный подход, достойнм представителем которого является С/С++. По существу в них нет неструктурных типов, а то, что какие-то объекты называются целыми, литерными и т. п., означает только одно: в больинстве контекстов они могут рассматриваться такими. о когда ну -но, разработчик программы имеет право мгновенно изменить точку зрения на объект. Строго говоря, здесь имеет место использование структурнх конструкторов, в частности, конструктора объединения (см. § 9.3.3) в худшем из вариантов. Это следствие принципа однородности памяти. се меняется, когда используется, к примеру, тегированная память. ля нее смена типа хранимых данных в регистре — нормальная операция машинного уровня, и, как следствие, приходится вводить в машинно-ориентированные языки строгу типизаци даннх ( есткие условия для неявных приведений — см. например, Эль-76 — автокод многопроцессорного вычислительного комплекса Эльбрус).
Предыдущая << 1 .. 174 175 176 177 178 179 < 180 > 181 182 183 184 185 186 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100