program sum
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
x = 1
y = 2
z = (x*y)/dtan(0.0D0)
print *, z
end program sum
当我使用Online Fortran Compiler编译此代码时,我得到“无限”。如果我用不同的语言编写这个代码,我得到你不能除以零,这是有道理的,因为tan(0)= 0,除非在某种程度上在fortran中0.0D0<>谢谢你。
答案 0 :(得分:2)
Fortran没有直接描述程序的预期结果,结果将取决于处理器的算术模型。
如果我们假设正在使用IEEE算法,那么3d0/0d0
的评估将发出ieee_divide_by_zero
标志的信号。人们也可以合理地预期分裂的结果是正无穷大。
引发异常标志时会发生什么情况取决于编译器。当这样的标志发出信号时,编译器可以默认停止,或者它可以继续。编译器也可能有编译时选项来更改响应。
考虑(Fortran 2003)计划:
use, intrinsic :: ieee_exceptions
implicit none
real(kind(0d0)) x
x=1
call ieee_set_halting_mode(ieee_divide_by_zero, .false.)
print *, x/0
call ieee_set_halting_mode(ieee_divide_by_zero, .true.)
print *, x/0
end
我们第一次尝试划分时,我们不会停止,可能会打印无限值;我们第二次这样做。