gpt4 book ai didi

fortran - 在 Fortran 中捕获整数异常

转载 作者:行者123 更新时间:2023-12-04 19:08:20 24 4
gpt4 key购买 nike

有没有办法用 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

在某些时候会有溢出 - 对于 integer(8)如图所示,它将在 21 左右发生。但是如果没有使用浮点数作为引用的计算,我无法确定......

最佳答案

Fortran 标准中没有处理整数溢出的内容。就目前而言,当计算超过所选类型可表示的最大值时,您甚至不能依赖整数环绕。所以,虽然像这样的测试

huge(2_8)+1 < 0_8

可能适用于大多数当前的编译器(至少是我最近使用的编译器),但不能保证。

我确信 Intel Fortran 和 gfortran 都没有提供编译器生成的整数溢出运行时检查。我不确定其他编译器,但我会(愉快地)惊讶地发现它们中的任何一个都这样做。

因此,我认为您必须继续采用当前的方法。

关于fortran - 在 Fortran 中捕获整数异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18881865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com