我正在阅读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 回答
Number Declarations等
有时被称为命名数字 . 这样的数字是universal“因为在预期 class 中某些特定类型的地方是可以接受的(参见8.6) . ”
附录:因为这些数字是universal,所以它们可以"be used as operands with the primitive subprograms of any type in the corresponding class."例如,
Two_Pi
可以乘以Float
,Long_Float
或从universal_real派生的任何类型 .在相关的说明中,您可能希望将此Ada binding添加到GNU GMP和MPFR库中 .
附录:绑定允许人们使用Ada的GNU库,如example所示 .