純粹作爲附錄,或者可選的角度來看,Fortran變量是根據分配給var的內存字節數來定義的。事實上,所有可比較的編譯器都是按字節分配來定義變量的,否則系統很難在內存中分配/存儲,而且如果沒有這樣的話,就很難執行算術運算等。
對於一些像我一樣,更容易看到什麼是用年齡稍大的符號(而不是「那種konfusion」怎麼回事尤其是,很多編譯器提供了直接的1:類和1之間的對應關係字節/ var,然後使得最大/最小整數的計算相當簡單(某些編譯器使用非線性或非直接的對應關係),儘管一定要注意最後的可移植性協助,例如
Integer(1) :: Int1 ! corresponds to a 1 byte integer
Integer(2) :: Int1 ! corresponds to a 2 byte integer
Integer(4) :: Int1 ! corresponds to a 4 byte integer
Integer(8) :: Int1 ! corresponds to an 8 byte integer
類似的表示法適用於其他類型的Fortran(房地產,邏輯等),所有變種類型有如果未指定「大小」分配字節的默認號碼。
特定類型的最大字節數也取決於編譯器和系統(例如,整數(16)在所有系統上不可用等)。
一個字節是8位,所以如果從1開始編號,或者從255開始,從0開始,單個字節應該能夠容納最大值2^8 = 256。
但是,在Fortran中,(幾乎所有)數字變量都是「簽名」的。這意味着在位表示的某個位置需要一位來跟蹤數字是+ ve數還是-ve數。所以在這個例子中,最大值爲2^7,因爲「符號」信息的一位是「丟失/保留」。因此,對於一個帶符號的1字節整數可能的值是-127:+128(請注意Abs(限制)總和爲255,因爲「0」佔據一個位置,總共有256個「事物」,因爲它應該是)。
一個類似的規則適用於所有這些變量,簡單的指數「n」在2^n中,根據字節數而變化。例如,一個Integer(8)變種具有8個字節或64個比特,1個比特丟失符號信息/保留,因此,如果開始時爲1,或= 4611686018427387904編號的最大可能值是2^63 = 9223372036854775808,從0
標準的整數數據模型將被概括爲:
IntNum = s * Sum[ w(k) * 2^(k-1), k=1:(NumBytes*8)-1],
其中s = 「符號」(+/- 1)中,w(k)是第k個比特爲1或0值。
一個不需要使用明確的數字或ENV的類型聲明瓦爾;用戶定義的編譯時間常數(即參數)是允許的。例如
Integer, Parameter :: DP = Kind(1.0d0) ! a standard Double Precision/8-byte declaration
Integer, Parameter :: I4B = 4 ! NOTICE, here the "Integer" bit has not been explicitly "sized", so defaults to "Integer(4)"
!
Real(DP) :: ADoublePrecReal ! an 8-byte Real (approx 15 decimal places with exp +/- approx 300, see Real data model)
!
Integer(I4B) :: AStandardInt ! a 4-byte integer.
由於參數聲明可以是通過使用等訪問的另一模塊,它是一個簡單的事情重新編譯大型複雜代碼的期望的「精確度」交替定義。例如,如果將DP編輯爲Kind(1.0),則應用該聲明的所有位置都將變爲「單精度」Real。
Fortran內部函數巨大(),Tiny()等幫助確定給定系統上可能的內容。
使用Fortran「位」內在函數和其他工具/方法可以實現更多功能。
只爲稍後有人出現。雖然沒有內在的,你可以使用'-huge(n)'來計算可用的最小整數。 – NoseKnowsAll 2016-02-05 22:36:58