Ada不动点类型的限制

时间:2013-03-12 04:38:33

标签: precision ada fixed-point delta

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

例如

delta 127 range 0..1_000_000;

需要一个字节来保存delta值。

但是

delta 0.0000000001 range 0..1;

需要更多字节,对吧?

delta有限制吗?当然,我们不能无限期地继续减少增量?

在上面的链接中说

  

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

1 个答案:

答案 0 :(得分:3)

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

对于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!)