Floating point 当声明浮动范围(0,10.0)时,我需要注意什么?

Floating point 当声明浮动范围(0,10.0)时,我需要注意什么?,floating-point,ada,floating-accuracy,Floating Point,Ada,Floating Accuracy,我希望此类型仅包含值x,其值为(x>0)&&(x它不应该引起任何问题。从技术上讲,类型上的范围声明对类型根本没有任何影响;它只影响第一个子类型。您的类型大于零声明定义了类型和第一个子类型。该类型包括在浮点格式,包括负数、零和大于10.0的数字。第一个子类型是该类型的子范围,其中仅包括您在该范围内指定的数字。使用该类型执行计算,中间结果可能超出该范围。该子类型仅与约束检查相关;而n分配一个大于零的变量,或传递一个大于零的参数,将检查该值以确保其在范围内,如果不在范围内,将引发约束错误。由于这是范围

我希望此类型仅包含值x,其值为
(x>0)&&(x它不应该引起任何问题。从技术上讲,
类型
上的
范围
声明对类型根本没有任何影响;它只影响第一个子类型。您的
类型大于零
声明定义了类型和第一个子类型。该类型包括在浮点格式,包括负数、零和大于10.0的数字。第一个子类型是该类型的子范围,其中仅包括您在该范围内指定的数字。使用该类型执行计算,中间结果可能超出该范围。该子类型仅与约束检查相关;而n分配一个
大于零的
变量,或传递一个
大于零的
参数,将检查该值以确保其在范围内,如果不在范围内,将引发
约束错误
。由于这是范围的唯一用途,因此不应导致任何奇怪的行为


需要注意的一点是,
a_float'nexting(0.0,1.0)
在不同的实现中可能不会返回相同的内容,即使在这两种情况下都使用IEEE float,因为有些实现可能不支持非规范化数字。只要
a_float'Denorm
返回相同的值,它应该是相同的(见a.5.3(10))当然,如果其中一个实现是在不使用IEEE浮点的机器上,例如VAX,则
'Adajcent
的值可能不同。当然,
z_float'相邻(0.0,1.0)
,其中
z_float
是一个IEEE 64位浮点,将不同于
a_float
版本,假设
a_float
是一个32位浮点。

好的,所以对于子类型,这是定义良好的。如果声明大于0会是这样的:
类型大于0是相邻的数字6范围a_float(0.0,1.0)..10.0
?@ker如果
a_float
大于0的
具有相同的表示形式(即两个32位IEEE float或两个64位).type
声明相当于
type anonymous是数字6;大于0的子类型是匿名范围…
,但您当然不能说
anonymous'nexting
type a_float is digits 6 range - 1.0E38 .. 1.0E38;
type larger_than_zero is new a_float range a_float'Adjacent(0.0, 1.0) .. 10.0;