83000行と83000列の行列を宣言する必要があります。 私は次の形式でそれを宣言する:MinGWの32ビットからのgfortranによってコードのgfortranで大きな行列を割り当てるときに整数オーバーフローが発生する
double precision,allocatable :: MAT(:,:)
allocate(MAT(83000,83000))
コンパイルが成功しているが、私は* .exeのを実行すると、私は次のエラーが表示されます
integer overflow when calculating the amount of memory to allocate
マトリックスの寸法を変更すると、つまり(nrow=100,ncol=100)
がすべて動作するため、コードは正しいようです。
私の質問は、寸法が大きいときに行列を宣言するにはどうすればいいですか?
83000 * 83000が最大32ビット整数値2147483648を超えています。これがオーバーフローの理由で、要素の数が多すぎます。ただし、コンピュータでオーバーフローが発生しない場合は、サイズに64バイトの整数が使用されます。あなたのWindowsとgfortranについてもっと教えてください。 32ビットまたは64ビット?どのバージョン?どのようにコンパイルしますか? –
とにかく、システムやコンパイラが32ビットである場合は、とにかくあまりにも多くのメモリを要求するよりも、 –
あなたの答えは@VladimirF thxですが、私はCodeBlocks環境(Windows 7 64ビット)でMinGW(したがってgfortran 32bit)を使用します。問題を解決するにはどうしたらいいですか?あなたはコンパイラの使用を推奨していますか? – plus91