是否可以声明具有无限上限的Ada范围?

时间:2017-11-22 23:02:06

标签: ada

我想在Ada中声明记录类型的速度范围。以下方法不起作用,但有没有办法让它起作用?

   --Speed in knots, range 0 to unlimited
   Speed : float Range 0.0 .. unlimited ;

我只想要这个数字为零正值...

2 个答案:

答案 0 :(得分:5)

您不能 - 但由于Speed的类型为Float,因此无论如何其值都不能超过Float'Last

Speed : Float range 0.0 .. Float'Last;

(您可能希望声明一个显式类型或子类型。)

答案 1 :(得分:2)

无限制是不可能的。它需要无限的记忆。我不知道有任何平台。可以编写一个包,提供与可用内存一样大的有理数字(例如,参见PragmAda Reusable Components中的PragmARC.Rational_Numbers),但这可能不是你的#&# 39;对此感兴趣。您可以使用编译器支持的最大精度声明自己的类型:

type Speed_Value_Base is digits System.Max_Digits;
subtype Speed_Value is Speed_Value_Base range 0.0 .. Speed_Value_Base'Last;
Speed : Speed_Value;

这可能是你追求的目标。