論理型変数をifortとgfortranの両方で動作する実数型に変換するための防弾方法を探しています。次のifortで動作しますが、のgfortranでない:Fortranで論理型をdoubleに変換してください
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
。 = -1も共通です(整数のすべてのビットは1に設定され、2の補数では-1となります)。 – WaywiserTundish