Ада: постоянная декларация - PullRequest
3 голосов
/ 05 июля 2010

Я читаю книгу Ады 95 Нормана Коэна, и на странице 129 у нас есть постоянные объявления:

 Pi: constant Float := 3.1415926536

и

Pi: constant := 3.1415926536

Второе объявление, как говорят, интерпретируется какЯ цитирую: «любая плавающая точка типа с фиксированной точкой с соответствующим диапазоном».Мой вопрос: скажем, кто-то работает с точностью Long_Float, тогда, например, чтобы объявить константу, скажем, 2 * PI, нужно ли специально указывать как

Two_Pi : CONSTANT Long_Float := 2.0 * 3.1415926536

или, что еще лучше:

Two_Pi: CONSTANT Long_Float :=  2.0 * Ada.Numerics.Pi;

(второе объявление, использующее больше цифр после десятичной точки)?

Будет ли

Two_Pi : CONSTANT := 2.0 * 3.1415926536   

или еще лучше

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

так же хорошо, каккнига утверждает, что компилятор Ada будет знать, например, если я использую Two_Pi в расчете Long_Float, то компилятор будет предоставлять требуемое количество прецизионных цифр?Поскольку значение Pi 3.1415926536 не относится к типу Long_Float (так как в нем меньше цифр точности), я предполагаю, что последнее объявление, т.е.

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

, будет всем, что требуется, если мне понадобится Two_Pi в расчете Long_Float.Я правильно понимаю?С аналогичным пониманием, тогда

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

будет иметь отношение и к вычислению типа Float, и компилятор выдаст только необходимое количество прецизионных цифр.

Спасибо большое ...

1 Ответ

2 голосов
/ 05 июля 2010

Number Declarations, такие как

Two_Pi : constant := 2.0 * Ada.Numerics.Pi;

, иногда называются именованными числами .Такое число является универсальным "в том смысле, что допустимо, когда ожидается некоторый конкретный тип в классе (см. 8.6 )."

Приложение: Поскольку такие числа универсальны , они могут «использоваться в качестве операндов с примитивными подпрограммами любого типа в соответствующем классе».Например, Two_Pi можно умножить на Float, Long_Float или любой тип, полученный из universal_real .

В связанной заметке вам может понравиться эта привязка Ada для библиотек GNU GMP и MPFR.

Приложение: привязка позволяет использовать библиотеки GNU из Ada, как показано в этом примере .

...