現在、Fortran95の知識をブラッシュアップしています(理由は聞かないでください)...
しかし、私は問題にぶつかっています。大きな整数をどのように処理しますか。サイズ:〜700000000000
INTEGER(KIND = 3)はこの数値を保持できません。誰かが興味を持っているなら、私が利用できるコンパイラはSilverfrostFTN95です。
私は整数を使用して、より大きなデータセットを実行しています。
何か提案はありますか?
現在、Fortran95の知識をブラッシュアップしています(理由は聞かないでください)...
しかし、私は問題にぶつかっています。大きな整数をどのように処理しますか。サイズ:〜700000000000
INTEGER(KIND = 3)はこの数値を保持できません。誰かが興味を持っているなら、私が利用できるコンパイラはSilverfrostFTN95です。
私は整数を使用して、より大きなデータセットを実行しています。
何か提案はありますか?
標準的な解決策(Fortran 95以降、コンパイラーがサポートしていると思います)は、組み込み関数を使用してSELECTED_INT_KIND
、有効な整数の種類(値はコンパイラーに依存します)とHUGE
組み込み値をプローブすることです。
SELECTED_INT_KIND (R)
-10 ^ R <n <10 ^ Rのすべての整数値nを表す整数型のkindtypeパラメーターを返します(そのような型が存在しない場合は-1を返します)。HUGE (K)
種類Kの整数型で表現可能な最大数を返します。たとえば、x86_64プロセッサ(gfortranコンパイラ、64ビットモード)を搭載したMacでは、次のプログラムがあります。
print *, selected_int_kind(1)
print *, selected_int_kind(4)
print *, selected_int_kind(8)
print *, selected_int_kind(16)
print *, selected_int_kind(32)
print *, selected_int_kind(64)
print *, huge(0_1)
print *, huge(0_2)
print *, huge(0_4)
print *, huge(0_8)
print *, huge(0_16)
end
出力:
1
2
4
8
16
-1
127
32767
2147483647
9223372036854775807
170141183460469231731687303715884105727
それは私がinteger(kind=8)
あなたの仕事にを使うだろうと私に言います。
少なくとも12桁の10進数を持つ整数「インデックス」を宣言するポータブルは次のとおりです。
integer, parameter :: MyLongIntType = selected_int_kind (12)
integer (kind=MyLongIntType) :: index
「kind=」は省略できます。
3などの特定の値を使用することは完全に移植性がなく、推奨されません。タイプ番号を連続して使用するコンパイラもあれば、バイト数を使用するコンパイラもあります。「selected_int_kind」は、要求された桁数を表すことができる、コンパイラーが使用できる最小の整数の種類の種類番号を返します。そのような型が存在しない場合、-1が返され、整数を宣言するためにkindvalueを使用すると値は失敗します。
gfortranとifortはどちらも、selected_int_kindに入力される10進数の種類を最大18まで返します。18などの大きな値は、通常、最大の正の値が9223372036854775807の8バイト整数を選択します。これは19桁ですが、コンパイラがこれをサポートしている場合タイプしますが、長いものではありません。19桁の整数すべてを表現できるわけではないため、selected_int_kind(19)は-1になります。
ループ制御変数として使用しているが、整数を直接使用していない場合(表現可能な最大のインデックスよりも大きい配列を宣言できないため、使用できないと思いますよね?)、Iやるべきことは、その子犬を100000のようなもので割り、そのループを何度も繰り返す別のループにネストすることだと思います。
INTEGER(KIND = 4)を試しましたか?
それに対する私たちの答えは、値を倍精度変数に入れ、それにDINTを実行して、小数部分を取り除くことでした。結果は、倍精度変数に配置された整数です。関数DINTは、すべてのFORTRANで常に使用できるわけではありません。この関数は倍精度整数関数であり、これにより非常に大きな整数(最大17桁)が可能になります。