【问题标题】:Ada: constant declarationAda:常量声明
【发布时间】:2011-03-11 20:05:37
【问题描述】:

我正在阅读 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;

在浮点类型计算中也将相关,编译器将仅提供所需的精度位数。

非常感谢...

【问题讨论】:

    标签: floating-point constants ada


    【解决方案1】:

    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 所示。

    【讨论】:

    • 谢谢。如果我理解正确,那么我不需要添加 Long_Float。您给出的表达式足以让编译器知道使用什么精度。
    • 我使用 Adacore 的 GNAT GPL 编译器。如果我理解正确,那么这个 GNU GMP 和 MPFR 数字库仅适用于 GCC。我说的对吗?
    • @yCalleecharan:分别是和否;见上文。
    • @yCalleecharan:糟糕,我误解了第二个问题。我知道绑定适用于 GNAT,但它也应该适用于支持与 GCC 二进制文件链接的其他编译器。
    • 谢谢。所以第一个是肯定的,第二个是/否:)。我将尝试检查此绑定是否适用于 Adacore 的 GNAT。
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 2012-04-29
    • 1970-01-01
    相关资源
    最近更新 更多