2010-07-05 75 views
3

我讀諾曼·科恩的阿達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; 

將所有需要的,如果我需要Two_Pi在Long_Float計算。我理解對嗎?具有類似的瞭解,那麼

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

將是相關的,可以在一個浮子式計算和編譯器將只供給所需數量的精度位數。

非常感謝......

回答

2

Number Declarations

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

是有時稱爲命名編號。這樣的數字是universal「,因爲在該類別中某些特定類型是預期的情況下它是可以接受的(見8.6)。」

附錄:因爲這些數字是universal,所以它們可以用作操作數,並且可以在相應的類中使用任何類型的原始子程序。例如,Two_Pi可以乘以Float,Long_Float或衍生自 universal_real的任何類型。

在相關說明中,您可能會喜歡此Ada binding GNU GMP和MPFR庫。

附錄:綁定允許使用來自Ada的GNU庫,如example所示。

+0

謝謝。如果我理解正確,那麼我不需要添加Long_Float。您給出的表達式足以讓編譯器知道使用何種精度。 – yCalleecharan 2010-07-05 16:27:28

+0

我使用Adacore的GNAT GPL編譯器。如果我理解正確,那麼這個GNU GMP和MPFR數值庫僅適用於GCC。我對嗎? – yCalleecharan 2010-07-05 16:34:10

+0

@yCalleecharan:分別是和不是;往上看。 – trashgod 2010-07-05 17:19:51