Смутно, System.Min_Int
по крайней мере, одной из последних комара, как представляется Long_Integer
(хотя, как Саймон указывает, что на самом деле Long_Long_Integer, а на некоторых компиляторов, но не все, они имеют тот же самый диапазон).
Таким образом, следующие работы (в gcc4.9.3):
Put_Line(Long_Integer'Image(System.Min_Int));
отчетности -9223372036854775808
.
И так же Ada.Long_Integer_Text_IO.Put(System.Min_Int);
С другой стороны, вы, возможно, пытается найти минимальное значение типа Integer
, который ... Integer'First
, и достаточно уверенный,
Put_Line(Integer'Image(Integer'First));
отчеты -2147483648
Обоснование различия заключается в том, что Ada может поддерживать несчетное количество целых типов, но для удобства предоставляет несколько стандартных значений, например Integer
.
System.Min_Int
и друзья отражают границы вашей конкретной системы: попытка объявления больших целых типов является законной, но не будет компилироваться в вашей системе (т. Е. До обновления компилятора).
При нормальном использовании вы будете использовать Integer или лучше, integer typ4es, который вы объявляете, с диапазонами, соответствующими вашей проблеме. И пределы каждого такого типа, очевидно, не могут быть встроены в язык или даже пакет System
. Вместо этого вы используете предопределенные атрибуты, такие как 'First
и 'Last
для запроса соответствующего целочисленного типа.
Таким образом, вы можете исследовать пределы вашего аппарата со следующим:
with Ada.Text_IO; use Ada.Text_IO;
with System;
procedure pmin is
type Big_Integer is range System.Min_Int ..System.Max_Int;
package Big_Integer_IO is new Integer_IO(Num => Big_Integer);
begin
Big_Integer_IO.Put(System.Min_Int);
Put(" to ");
Big_Integer_IO.Put(System.Max_Int);
New_Line;
end pmin;
Здесь (gcc4.9.3) Я получаю результат:
-9223372036854775808 до 9223372036854775807
Если System.Min_Int больше не находится в диапазоне Long_Integer в комара/НКУ 6,1 Мне интересно посмотреть, что это делает на вашей системы. Добавьте комментарий к комментарию.
'Put_Line (Long_Integer'Image (System.Min_Int)),' 'дает мне значение не в диапазоне типа "Standard.Long_Integer"' (это с gcc-gnat-6.1 на i686. – binary01
См. расширенный ответ. Он работал на gcc4.9.3, но, предположительно, ограничения 'System' были расширены. Найдите« System.ads »на своем компьютере, если вы хотите проверить. целочисленный тип: 'type Big_Integer - это диапазон System.Min ..System.Max;' и создавать экземпляр целочисленного пакета ввода-вывода с этим типом. Я обновлю ответ в нескольких ... –
Хорошо, это Long_Long_Integer в моей системе, поэтому Long_Long_Integer'Image. – binary01