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です。
種類番号ごとに最大の整数が同じである理由:2147483647
?そして、最小の整数の組み込み関数はありますか?
サブルーチンrang
が呼び出されたときに、整数の種類番号を保持するにはどうすればよいですか?それが最大の整数の鍵だと思います。
あなたのサブルーチン:
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