Sam*_*dis 4 fortran loops largenumber
我正在尝试使用大数(~10 ^ 14),我需要能够存储它们并迭代那个长度的循环,即
n=SOME_BIG_NUMBER
do i=n,1,-1
Run Code Online (Sandbox Code Playgroud)
我尝试了通常的星形符号kind=8等,但似乎没有任何效果.然后我检查了huge内在函数和代码:
program inttest
print *,huge(1)
print *,huge(2)
print *,huge(4)
print *,huge(8)
print *,huge(16)
print *,huge(32)
end program inttest
Run Code Online (Sandbox Code Playgroud)
在所有情况下产生数字2147483647.为什么是这样?我在64位机器上使用gfortran(f95).
如果我需要一个bignum图书馆,人们会建议哪一个?
我使用的gfortran版本,Mac上的4.3,4.4和4.5,支持8字节整数.在Fortran> = 90中选择变量类型的最佳方法是使用内部函数来指定所需的精度.尝试:
integer, parameter :: LargeInt_K = selected_int_kind (18)
integer (kind=LargeInt_K) :: i, n
Run Code Online (Sandbox Code Playgroud)
获得至少18个十进制数字,通常为8字节整数.
使用gfortran 4.3,巨大的(1_LargeInt_K)输出9223372036854775807.当你写巨大的(1)等时,默认情况下常量是一个默认的整数,这里显然是4字节,因为巨大的返回2147483647.所以有时你需要指定精度常数,而不仅仅是变量 - 更常见的是,当人们在真实常数上丢失有效数字时,这会使人们绊倒,默认为单精度.
另见Fortran:整数*4对整数(4)与整数(种类= 4)
通常gfortran有命令名gfortran.f95可以是一个不同的编译器吗?试试"gfortran -v"和"f95 -v".
你误解了HUGE函数的精确定义. HUGE(num)返回与类型和类型相同的最大数字num.返回的值也具有相同的类型和类型num.由于所有输入值都是(默认)整数HUGE,因此返回最大的默认大小整数.
HUGE(num)不返回最大的整数kind=num.也不HUGE(num)返回以num字节为单位表示的最大数字.虽然许多编译器使用integer(kind=4)和integer(kind=8) 等为4和8字节的整数,这不是由语言标准保证的,并且不能依靠是便携式的.
@ MSB的回答告诉你如何做你想做的事,我只是在澄清一些问题.