来自Fortran内在函数的表观混合模式算法

时间:2018-07-17 01:52:33

标签: fortran

我正在做的事情非常简单。以下是相关的声明:

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_alphaE_total_betaE_total_gamma仅在各个循环中总共运行dp。我要求最接近的整数NINT(P_H2_sed)并得到-2147483648,它看起来像混合模式算术。浮点数P_H2_sed返回2529548272025.4888,所以我希望NINT返回2529548272026。我认为不可能从内部函数中获得这种结果。自从使用旧的F77编译器以来,我从未见过这种情况。我在做坏事,但问题是

1 个答案:

答案 0 :(得分:3)

NINT默认情况下,返回带有默认类型参数的整数,该整数通常等效于int32

这种整数不能表示高达2529548272026的数字。可表示的最大数字为2^31-1,即2147483647。得到的结果与此类似,但是可表示的数字最低-2147483648(等于所有32位都设置为1)。

要从NINT获取其他结果,请传递一个名为kind的可选参数,例如:NINT(P_H2_sed, kind=int64)