Fortran:最大和最小的整数 [英] Fortran: the largest and the smallest integer
问题描述
程序intkind
隐式无
整型:: n = 1
integer :: integer_range = 1
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
包含
子程序rang(最大)
整数最大
print *,巨大(最大)
结束子程序
结束
我得到的整数类型数字是:1,2,4,8。
-
为什么每个类型的每个最大整数数字相同:
2147483647
?是否有一个内部函数的最小整数? c $ c>被调用?我认为这是最大整数的关键。 你的子程序: Why is each largest integer for each kind number the same:
2147483647
? And is there a intrinsic function for the smallest integer?How can I keep the integer kind number when the subroutine
rang
is called? I think it is the key to the largest integer.
子程序响(最大)
整数::最大
print *,巨大(最大)
结束子程序
以默认大小的整数作为输入,并打印出最大可能值将适合该默认大小的整数。它会总是返回巨大的(默认整数),在大多数系统中,它是巨大的(4字节整数)或2147483647. 巨大
考虑只有变量类型;它不会以任何方式解释变量。上面要做的事情的唯一方法就是使用参数化的派生类型,这些派生类型足够新,以至于在编译器中对它的支持仍然有点多余。
如果你想看看不同的INTEGER类的范围,你将不得不使用不同的变量:
程序integerkinds
use iso_fortran_env
implicit none
integer :: i
整数(kind = int8):: i8
整数(kind = int16):: i16
整数(kind = int32):: i32
整数(kind = int64):: i64
整数(kind = selected_int_kind(6)):: j6
整数(kind = selected_int_kind(15)):: j15
print *,'Default:'
print *,huge(i)
print *,'Int8:'
print *,huge(i8)
print *,'Int16:'
print *,huge(i16)
print *,'Int32:'
print * ,巨大的(i32)
print *,'Int64:'
print *,巨大的(i64)
print *, ''
print *''选择的整数种类6:'
print *,巨大的(j6)
print *''选择的整数种类15:'
print *,huge(j15)
end program integerkinds
运行时提供:
$ ./intkinds
默认值:
2147483647
Int8:
127
Int16:
32767
Int32:
2147483647
Int64:
9223372036854775807
选择整数种类6:
2147483647
选择的整数种类15:
9223372036854775807
Fortran is completely new for me, can anybody help me to solve the follwing problem? I want to find out all the integer kind numbers and the largest and the smallest value for each kind number on my pc. I have code listed below:
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
The integer kind numbers what I get are : 1,2,4,8.
Your subroutine:
subroutine rang(largest)
integer :: largest
print *, huge(largest)
end subroutine
takes as input a default-sized integer, and prints the largest possible value that will fit in that default-sized integer. It will always return huge(default integer) which is, on most systems, huge(4-byte-integer), or 2147483647. huge
considers only the variable type; it doesn't interpret the variable in any way. The only way you could do what you're trying to do above is with parameterized derived types, which are new enough that support for it in compilers is still a little spotty.
If you want to take a look at ranges of different KINDs of INTEGERs, you'll have to use different variables:
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
Running gives:
$ ./intkinds
Default:
2147483647
Int8:
127
Int16:
32767
Int32:
2147483647
Int64:
9223372036854775807
Selected Integer Kind 6:
2147483647
Selected Integer Kind 15:
9223372036854775807
这篇关于Fortran:最大和最小的整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!