我想在Ada中声明记录类型的速度范围。以下方法不起作用,但有没有办法让它起作用?
--Speed in knots, range 0 to unlimited
Speed : float Range 0.0 .. unlimited ;
我只想要这个数字为零正值...
答案 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;
这可能是你追求的目标。