2

阅读这个http://en.wikibooks.org/wiki/Ada_Programming/Types/delta 让我想知道极限值delta是多少。

例如

delta 127 range 0..1_000_000;

需要一个字节来保存增量值。

delta 0.0000000001 range 0..1;

需要更多字节,对吗?

那么delta有限制吗?当然,我们不能无限地进行更小的增量吗?

在上面的链接中它说

如果编译器接受您的定点类型定义,则它保证由该类型表示的值将至少具有指定的准确度(或更好)。如果编译器不支持类型定义(例如,由于硬件有限),则会导致编译时错误。

4

1 回答 1

3

编译后的代码不会在Delta任何地方保存该值;类型的存储值被缩放,因此所需的大小对应于除以的范围Small(请记住,如果Delta不是 2 的幂,则需要指定Small与 相同Delta)。

对于 GNAT,事实证明存在 的最小支持值Delta,并且Size对于以下类型的对象存在最大值: 在 Mac OS X (Intel) 上,

Small_Delta : constant := 2.0 ** (-127);
Small_Bound : constant := 2.0 ** (-64);
type T1 is delta Small_Delta range -Small_Bound .. Small_Bound;

失败了

"T1'Small" too small, minimum allowed is 2.0**(-80)

Larger_Delta : constant := 2.0 ** (-64);
Larger_Bound : constant := 2.0;
type T2 is delta Larger_Delta range -Larger_Bound .. Larger_Bound;

失败了

size required (67) for type "T2" too large, maximum allowed is 64

(我不确定为什么是 67,而不是 65!)

于 2013-03-12T07:25:03.797 回答