0

たとえば、配列内で NA が見つかったら、ルーチンを停止したいとします。これどうやってするの?

「if (array(i) .eq. NA) ...」は機能しないようです。ありがとう、

アップデート:

array は、浮動小数点数の配列です。たとえば、

REAL :: アリア(35)

4

2 に答える 2

6

本当に s を探していNaNて、最新のコンパイラを使用している場合は、ieee_is_nan()関数でうまくいくはずです。use ieee_arithmeticまたは他の組み込みIEEEモジュールのいずれかが必要になると思います。

コンパイラがそれほど新しくない場合は、一般的に実装されているが非標準のisnan()関数が含まれている可能性があります。

于 2012-07-29T06:07:45.280 に答える
2

あなたの質問はあまり制約されていません。array文字列の配列ですか?例えば

character(len=20) :: array(40)

この場合、次のことができるはずです。

do i=1,40
   if(array(i).eq."NA")then
       exit
   else
       !do something else
   endif
enddo

これが浮動小数点数の配列である場合(およびNAが浮動小数点定数として定義されている場合)、浮動小数点演算が正確になることはめったになく、丸め誤差によって数学的に実際と同等の計算が行われる可能性があるため、注意が必要な場合があります。異なる値に評価します。言い換えれば、この問題の解決策は、実際にはどのように宣言されているかに依存しNAますarray...

于 2012-07-29T03:41:51.983 に答える