質問
私は大量(~10 ^ 14)で作業しようとしています、そして私はそれらを保存してその長さのループを繰り返すことができる必要があります、すなわち。
n=SOME_BIG_NUMBER
do i=n,1,-1
.
私はいつもの星表記、kind=8
などを試しましたが、何も機能しないようです。
その後、huge
組み込み関数とコード:
program inttest
print *,huge(1)
print *,huge(2)
print *,huge(4)
print *,huge(8)
print *,huge(16)
print *,huge(32)
end program inttest
.
はすべての場合において2147483647を生成します。どうしてこれなの?64ビットマシンにGFORTRAN(F95)を使用しています。
私がBignumライブラリを必要とするのであれば、人々はどれを提案しますか?
解決
私が使用するgfortranバージョンは、Mac上で4.3,4.4と4.5で、8バイトの整数をサポートします。 Fortran>= 90で変数型を選択するための最良の方法は、固有関数を使用して必要な精度を指定することです。試してみてください:
integer, parameter :: LargeInt_K = selected_int_kind (18)
integer (kind=LargeInt_K) :: i, n
.
少なくとも18の10進数を取得するために、通常は8バイトの整数です。
gfortran 4.3、巨大な(1_largeint_k)出力9223372036854775807。変数だけではなく、定数の精度 - より一般的に、このトリップは実際の定数で重要な数字を失い、デフォルトは単精度です。
fortran:integer * 4 vs整数(4)vs整数(intile= 4)
通常gfortranにはgfortranがコマンド名があります。 F95は別のコンパイラになることができますか? "gfortran -v"と "f95 -v"を試してください。
他のヒント
HUGE
関数の正確な定義を誤解しました。HUGE(num)
は、同じ種類の数値を返し、num
と同じように返します。返される値は、num
と同じ種類と型を持ちます。すべての入力値が(デフォルト)整数HUGE
であるため、正しく最大のデフォルトサイズの整数を返します。
HUGE(num)
は、kind=num
を使用して最大の整数を返しません。HUGE(num)
は、num
バイトで表される最大数を返します。多くのコンパイラは、4バイトと8バイトの整数と8バイトの整数のinteger(kind=4)
とinteger(kind=8)
etc を使用していますが、これは言語規格によって保証されず、ポータブルになることはできません。
@ MSBの答えは、あなたが望むものをする方法をあなたに伝えます、私はいくつかの説明を持っています。
概要:コンパイラオプションを見ることを検討してください。
私がFortranをやって以来、L-O-N-G時間だった、そして私は巨大な()を覚えていませんが、私はこれを少し見ました。私のIntel Linuxマシンはgfortran 4.1.2を持っています。 64ビットの整数で動作させるために、-fdefault-integer-8オプションをオンにしてコンパイルしなければならなかったことがわかりました。具体的には、このコードで:
program inttest
print *, huge(1)
end program inttest
.
実行
$ gfortran inttest.for
印刷された実行可能ファイルを作成しました:
2147483647
しかし、実行:
$ gfortran -fdefault-integer-8 inttest.for
出力を与えた実行可能ファイルになりました:
9223372036854775807
また、整数* 8として変数を宣言し、-fdefault-integer-8オプションなしでコンパイルされた場合、エラーが発生しました。コード:
program inttest2
integer*8 test_int
test_int = 9223372036854775807
print *, test_int
end program inttest2
.
実行
$ gfortran inttest2.for
の結果
ファイルINTTEST.FOR:4
.test_int = 9223372036854775807 1
エラー:(1)
の種類の整数が大きすぎる
しかし、-fdefault-integer-8オプションをコンパイルしたときには、
を印刷した実行可能ファイルを手に入れました。9223372036854775807
他にも役に立つであろう他にもあるが、私はさらに調査しなかった。
認可、これはまだあなたを10 ^ 14にしませんが、あなたが見た結果を説明するのに役立つかもしれません。