阿达:不断声明

时间:2010-07-05 09:16:39

标签: floating-point constants ada

我正在阅读Norman Cohen的Ada 95书,在第129页我们有不断的声明:

 Pi: constant Float := 3.1415926536

Pi: constant := 3.1415926536

据说第二个声明被解释为:“任何具有适当范围的定点类型的浮点数”。我的问题是说一个正在使用Long_Float精度,然后例如声明一个常量说2 * PI做一个必须具体声明像

Two_Pi : CONSTANT Long_Float := 2.0 * 3.1415926536

还是好多了:

Two_Pi: CONSTANT Long_Float :=  2.0 * Ada.Numerics.Pi;

(利用小数点后多位数的第二个声明)?

Two_Pi : CONSTANT := 2.0 * 3.1415926536   

或更好

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

与本书声称的一样好,以便Ada编译器知道如果我在Long_Float计算中使用Two_Pi,那么编译器将提供所需的精确数字位数?由于Pi值3.1415926536不是Long_Float类型(因为它具有较少的精确数字),我猜最后一个声明即。

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;
如果我在Long_Float计算中需要Two_Pi,那么

将是必需的。我理解对吗?有了类似的理解,那么

Two_Pi: CONSTANT  :=  2.0 * Ada.Numerics.Pi;

在Float类型计算中也是相关的,编译器只提供所需数量的精度数字。

非常感谢...

1 个答案:

答案 0 :(得分:2)

Number Declarations,例如

Two_Pi : constant := 2.0 * Ada.Numerics.Pi;

有时称为命名数字。这样的数字是universal“,因为在预期班级中某些特定类型的情况下是可以接受的(参见8.6)。”

附录:因为这些数字是universal,所以它们可以“用作相应类中任何类型的原始子程序的操作数。”例如,Two_Pi可以乘以FloatLong_Float或从 universal_real 派生的任何类型。

在相关的说明中,您可能希望将这个Ada binding添加到GNU GMP和MPFR库中。

附录:绑定允许人们使用Ada中的GNU库,如example所示。