在Ada中聲明範圍始終包含在內。 如果我想具有所有從0
到42
整數a型(或作爲工科數學間隔:[0, 42]
)我聲明,如下所示:我如何在ada中聲明一個非包含浮點範圍?
type zero_to_42 is range 0 .. 42;
如果我要排除的零(範圍(0, 42]
),這不是離散類型的問題:
type not_zero_to_42 is range (zero_to_42'First + 1) .. zero_to_42'Last;
,但我仍然需要手工做到這一點,沒有zero_to_answer'NextAfterFirst
對於浮點類型的我不知道如何正確地做到這一點。排除零很簡單,但排除其他任何東西似乎實現定義給我。
type works is digits 6 range 0.0 .. 42.0
type also_works is new works range (0.0 + works'small) .. 42.0
type broken is new works range 0.0 .. (42.0 - works'small)
因爲附近42.0
浮點值比浮附近0.0
點值精度要求不高,42.0 - works'small
四捨五入爲42.0
我當然可以通過手的作品(如41.9999
)找到一個值,但似乎醜陋的我,當我更改works
所具有的位數時可能無法工作。
我不認爲語言爲浮點類型定義了'small';該屬性用於定點。允許實現者定義自己的屬性,但我不確定是否允許他們在語言未定義的地方定義語言定義的屬性。無論如何,在浮點類型上使用''small'似乎給出了實現定義的結果,並且不具有可移植性。 – ajb
@ajb正確地說'小,但是有浮動點類型的Fraction屬性。也允許實現添加新的(非標準)屬性,但它們必須在用戶指南中記錄。可以使用編譯指示(不記得哪一個)來禁止實現定義的屬性。 – darkestkhan
@darkestkhan(1)一個正數的'Fraction'總是返回一個0.5到1之間的結果,所以這裏不適合。 (2)RM 4.1.4(12)表示,新屬性通常不能與語言定義的標識符具有相同的標識符,因此除非在Ada 83中定義,否則實現不應定義自己的「small」。 3)'雜注限制(No_Implementation_Attributes)'是你正在尋找的。 – ajb