我正在尋找一種將邏輯類型變量轉換爲實際類型的防彈方法,該方法可以在ifort和gfortran中工作。在ifort下面的作品,但不在 gfortran:在Fortran中將邏輯類型轉換爲雙精度
logical :: a
real :: b
a = .true.
b = dble(a)
在gfortran拋出的錯誤是
b = dble(a)
1
Error: 'a' argument of 'dble' intrinsic at (1) must be a numeric type
顯然,.TRUE。應映射到1.d0和.false。到0.d0。這樣做的最好方法是什麼?
對於它的價值,如果你打開標準檢查ifort應該抱怨。它工作的原因是處理器有一個允許將邏輯隱式轉換爲整數的擴展,然後標準提供從整數到實數的轉換。請注意,當你明顯地說「.TRUE」的內部表示時。將看起來完全沒有像1.0的實際值,而在某些*處理器上.TRUE的內部表示。與整數值1完全相同(特別是如果默認邏輯和LOGICAL(C_BOOL)是相同的表示)。 – IanH 2013-02-25 01:53:16
。真。 = -1也是常見的(整數中的所有位設置爲1,其補碼= 2)。 – WaywiserTundish 2013-02-25 10:19:01