Fortran:最大和最小的整数 [英] Fortran: the largest and the smallest integer

查看:306
本文介绍了Fortran:最大和最小的整数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Fortran对我来说是全新的,任何人都可以帮助我解决以下问题吗?我想找出所有整数类型数字和我的电脑上每种类型数字的最大和最小值。我有以下代码:

 程序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。


  1. 为什么每个类型的每个最大整数数字相同: 2147483647 ?是否有一个内部函数的最小整数?

  2. c $ c>被调用?我认为这是最大整数的关键。 你的子程序:

     子程序响(最大)
    整数::最大
    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.

    1. Why is each largest integer for each kind number the same: 2147483647? And is there a intrinsic function for the smallest integer?

    2. How can I keep the integer kind number when the subroutine rang is called? I think it is the key to the largest integer.

    解决方案

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆