質問

私は大量(~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にしませんが、あなたが見た結果を説明するのに役立つかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top