web-dev-qa-db-ja.com

Fortran:最大および最小の整数

Fortranは私にとってまったく新しいものですが、次の問題を解決するのを誰かが助けてくれますか?私のPCで、すべての整数の種類番号と、各種類番号の最大値と最小値を調べたいと思います。私は以下にリストされたコードを持っています:

program intkind
implicit none

integer :: n=1
integer :: integer_range =1


do while(integer_range /= -1)
    print*, "kind_number ", selected_int_kind(n)
    call rang(integer_range)
    n = n *2
    integer_range = selected_int_kind(n)
end do

contains
subroutine rang(largest) 
    integer largest
    print*, huge(largest)

end subroutine

end 

私が得る整数の種類の数は:1、2、4、8です。

  1. 種類番号ごとに最大の整数が同じである理由:2147483647?そして、最小の整数の組み込み関数はありますか?

  2. サブルーチンrangが呼び出されたときに、整数の種類番号を保持するにはどうすればよいですか?それが最大の整数の鍵だと思います。

11
echo

あなたのサブルーチン:

subroutine rang(largest) 
    integer :: largest
    print *, huge(largest)
end subroutine

デフォルトサイズの整数を入力として受け取り、そのデフォルトサイズの整数に収まる最大値を出力します。 常に huge(デフォルトの整数)を返します。これは、ほとんどのシステムでは、huge(4バイト整数)または2147483647です。hugeは変数タイプのみを考慮します。 解釈変数はまったくありません。上記でやろうとしていることを実行できる唯一の方法は、パラメーター化された派生型を使用することです。これは、コンパイラーでのサポートがまだ少し不十分であるほど新しいものです。

さまざまな種類のINTEGERの範囲を確認する場合は、さまざまな変数を使用する必要があります。

program integerkinds
    use iso_fortran_env
    implicit none

    integer :: i
    integer(kind=int8)  :: i8
    integer(kind=int16) :: i16
    integer(kind=int32) :: i32
    integer(kind=int64) :: i64

    integer(kind=selected_int_kind(6)) :: j6
    integer(kind=selected_int_kind(15)):: j15

    print *,'Default:'
    print *, huge(i)
    print *,'Int8:'
    print *, huge(i8)
    print *,'Int16:'
    print *, huge(i16)
    print *,'Int32:'
    print *, huge(i32)
    print *,'Int64:'
    print *, huge(i64)

    print *,''

    print *,'Selected Integer Kind 6:'
    print *, huge(j6)

    print *,'Selected Integer Kind 15:'
    print *, huge(j15)

end program integerkinds

実行すると:

$ ./intkinds
 Default:
  2147483647
 Int8:
  127
 Int16:
  32767
 Int32:
  2147483647
 Int64:
  9223372036854775807

 Selected Integer Kind 6:
  2147483647
 Selected Integer Kind 15:
  9223372036854775807
16
Jonathan Dursi