我正在做的事情非常简单。以下是相关的声明:
USE, INTRINSIC :: ISO_Fortran_env, dp=>REAL64 !modern DOUBLE PRECISION
REAL(dp), PARAMETER :: G_H2_alpha = 1.57D+04, G_H2_beta = 5.3D+03, G_H2_gamma = 4.5D+03
REAL(dp) :: E_total_alpha, E_total_beta, E_total_gamma, P_H2_sed
用法:
P_H2_sed = G_H2_alpha * E_total_alpha + G_H2_beta * E_total_beta * G_H2_gamma * E_total_gamma
其中E_total_alpha
,E_total_beta
和E_total_gamma
仅在各个循环中总共运行dp
。我要求最接近的整数NINT(P_H2_sed)
并得到-2147483648,它看起来像混合模式算术。浮点数P_H2_sed
返回2529548272025.4888,所以我希望NINT
返回2529548272026。我认为不可能从内部函数中获得这种结果。自从使用旧的F77编译器以来,我从未见过这种情况。我在做坏事,但问题是 。
答案 0 :(得分:3)
NINT
默认情况下,返回带有默认类型参数的整数,该整数通常等效于int32
。
这种整数不能表示高达2529548272026
的数字。可表示的最大数字为2^31-1
,即2147483647
。得到的结果与此类似,但是可表示的数字最低-2147483648
(等于所有32位都设置为1)。
要从NINT
获取其他结果,请传递一个名为kind
的可选参数,例如:NINT(P_H2_sed, kind=int64)
。