Dan*_*iel 7 fortran integer numbers long-integer
目前我正在刷新我的Fortran95知识(不要问为什么)......
我遇到了一个问题.如何处理大整数,例如.大小:~7000000万
INTEGER(KIND = 3)不能保存此数字.如果有人感兴趣,我可用的编译器是Silverfrost FTN95.
我使用整数来运行更大的数据集.
你有什么建议吗?
F'x*_*F'x 16
标准解决方案(因为Fortran 95,所以我假设您的编译器支持它)是使用SELECTED_INT_KIND内部来探测有效的整数种类(其值取决于编译器)和HUGE内在的.
SELECTED_INT_KIND (R) 返回整数类型的kind类型参数,表示所有整数值n,其中包含?10 ^ R <n <10 ^ R(如果不存在此类型,则返回-1).HUGE (K) 以类型K的整数类型返回最大可表示的数字.例如,在我的Mac上使用x86_64处理器(gfortran编译器,64位模式),以下程序:
print *, selected_int_kind(1)
print *, selected_int_kind(4)
print *, selected_int_kind(8)
print *, selected_int_kind(16)
print *, selected_int_kind(32)
print *, selected_int_kind(64)
print *, huge(0_1)
print *, huge(0_2)
print *, huge(0_4)
print *, huge(0_8)
print *, huge(0_16)
end
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
4
8
16
-1
127
32767
2147483647
9223372036854775807
170141183460469231731687303715884105727
Run Code Online (Sandbox Code Playgroud)
这告诉我,我会用integer(kind=8)你的工作.
用于声明具有至少12个十进制数字的整数"索引"的便携式是:
integer, parameter :: MyLongIntType = selected_int_kind (12)
integer (kind=MyLongIntType) :: index
Run Code Online (Sandbox Code Playgroud)
"kind ="可以省略.
使用诸如3之类的特定值是完全不可移植的,不推荐使用.有些编译器连续使用类型编号,其他编译器使用字节数."selected_int_kind"将返回编译器可用的最小整数类型的种类编号,可以表示所请求的位数.如果不存在这样的类型,则返回-1,并且当使用类型值声明整数时,该值将失败.
gfortran和ifort都返回一种十进制数字输入到selected_int_kind最多18个.大的值(如18)通常会选择一个8字节的整数,其正值最大值为9223372036854775807.这个数字有19位,但如果编译器支持这个类型但不是更长的,selected_int_kind(19)将为-1,因为并非所有19位数的整数都是可表示的.
| 归档时间: |
|
| 查看次数: |
21041 次 |
| 最近记录: |