Ale*_*ogt 5 fortran integer-overflow gfortran intel-fortran
有没有办法捕获整数异常,gfortran或者ifort像捕获浮点异常一样?
考虑这个简单的程序来计算阶乘:
program factorial
use, intrinsic :: iso_fortran_env
implicit none
integer(8) :: fac
real(REAL64) :: facR
integer,parameter :: maxOrder = 30
integer :: i
fac = 1 ; facR = 1.e0_REAL64
do i=2,maxOrder
fac=fac*i ; facR=facR*real(i,REAL64)
write(*,*) i, fac, facR
enddo ! i
end program
Run Code Online (Sandbox Code Playgroud)
在某些时候会出现溢出 -integer(8)如此处所示,它将发生在 21 左右。但是如果没有使用浮点数作为参考的计算,我无法确定......
Fortran 标准中没有任何内容处理整数溢出。按照目前的情况,当计算超过所选类型可表示的最大值时,您甚至不能依赖整数回绕。所以,虽然像这样的测试
huge(2_8)+1 < 0_8
Run Code Online (Sandbox Code Playgroud)
可能适用于大多数当前的编译器(至少是我最近使用的编译器),但不能保证。
我确信 Intel Fortran 和 gfortran 都不提供编译器生成的整数溢出运行时检查。我不确定其他编译器,但我会(愉快地)惊讶地发现它们中的任何一个都这样做。
因此,我认为您必须继续采用当前的方法。
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |