我在Fortran代碼中爲a=0.00001
分配了一個實際變量。在打印下面的行上的變量時,給出a=9.9999997473787516E-006
而不是1E-5
。避免爲fortran實變量聲明「_8」?
解決此問題的方法是聲明a=0.00001_8
或a=0.00001_rk
,並使用rk
定義值8
。
我想在編程時避免這種underscore
風格。有沒有辦法做到這一點沒有下劃線的是C
或C++
我在Fortran代碼中爲a=0.00001
分配了一個實際變量。在打印下面的行上的變量時,給出a=9.9999997473787516E-006
而不是1E-5
。避免爲fortran實變量聲明「_8」?
解決此問題的方法是聲明a=0.00001_8
或a=0.00001_rk
,並使用rk
定義值8
。
我想在編程時避免這種underscore
風格。有沒有辦法做到這一點沒有下劃線的是C
或C++
您可以使用該指數d,而不是E:
a=0.00001d0
,如果你的變量已經被聲明爲雙精度這是唯一有用的實(RK)王氏RK的定義爲:
integer,parameter :: rk=selected_real_kind(15,100)
另外,不要用_8
但_rk
(_8
不可移植)。
如果類型值'rk'(或'8')與雙精度值相同,則爲真。 – francescalus
@francescalus幾乎總是這樣......除非我很久以前使用Cray或CDC電腦! –
我在一個小時前使用了一個編譯器,它會拒絕接受'1._8'。如果我問它,那個編譯器也可以接受'rk'作爲默認類型。 – francescalus
我會在這裏列出幾個選項,但最終答案是使用下劃線標記。特別是在開發新代碼時,所有實際變量都應使用kind
參數。有幾個很好的許多方法來定義一種參數:
ISO_FORTRAN_ENV
具有通過它們的大小定義實數和整數:REAL32
,REAL64
,INT32
,INT64
,等等。SELECTED_REAL_KIND
獲得一種具有指定的精度和指數範圍IEEE_SELECTED_REAL_KIND
爲IEEE兼容ISO_C_BINDING
包含C_DOUBLE
和其他人對C的互操作性這樣一來,就可以實現在任何機器上所需的精度。例如,
use ISO_FORTRAN_ENV, only : wp => REAL64
real(wp) :: x
重要的部分是要顯式聲明wp
。然後,如果你想要使用X具有值0.1,您使用
x = 0.1_wp
這是FORTRAN符號將其設置爲使用wp
那種代表0.1。你不應該僅僅因爲你認爲它的可讀性不好就拒絕它。
但是,我將包括一些其他選項。他們雖然不是很好!使用d
代替e
,這要求double precision
,例如x = 0.1d0
使用編譯標誌更改默認實樣
聲明常量。在gfortran
中,您通常會使用-fdefault-real-8 -fdefault-double-8
。這個編譯器選項並不總是存在的(當然不是完全相同的),也限制了你可以聲明的可能的真實類型。
有辦法使用'0.00001'給像'0.0001_rk',但要真正回答這個問題_why_要避免使用(完全適合)的形式'0.0001_rk'將是有益的瞭解。我可以避免在我的程序中編寫'0'來代替編寫'1-1',但我懷疑有人會建議這樣做。 – francescalus
基本上爲了更好的可讀性,我不想有任何後綴。有時代碼的長度會因多個地方的後綴而增加。有沒有辦法做到這一點,如在C或C + +,我們不使用任何後綴聲明的變量? –
你應該努力讓你的代碼可維護和便攜。避免'_rk'表示法既不是那些東西。可讀性很重要,但在這種情況下是次要的。 – Ross