gpt4 book ai didi

Fortran:可能的值(value)变化

转载 作者:行者123 更新时间:2023-12-01 12:55:16 32 4
gpt4 key购买 nike

我有一个用 gfortran 编译的 fortran 代码(几千行,所以我会尝试发布重要的行)给我:

nrev(isat)=dint((t_ref-t_in)/zper)+1
1
Warning:Possible change of value in conversion from REAL(8) to INTEGER(4) at (1)

它们被初始化为:

integer*4  nrev(nmaxsat)
integer*4 isat
real*8 t_ref
real*8 t_in
real*8 zper

关于如何解决这个问题的任何想法?谢谢!

最佳答案

摆脱所有警告(即使是小警告)是一个绝妙的主意 - 即使只是这样当您确实遇到更重要的问题时,您也能看到它们,而不是让输出被小问题淹没。

在这种情况下,警告信息相当明确;您正在将 double 分配给整数。 dint 内在截断,但不转换类型;所以你要分配一个 double 值,它的值被截断为一个整数。您可能正确地注意到内在函数的命名令人困惑,但是......

如果您想进行转换和截断,idint 实际上会转换为整数。

例如这个程序

program foo

integer :: nrev
double precision :: t_ref

t_ref = 1.

nrev = dint(t_ref)

end program foo

创建相同的警告:

$ gfortran -o foo foo.f90 -Wall -std=f95
foo.f90:8.11:

nrev = dint(t_ref)
1
Warning: Possible change of value in conversion from REAL(8) to INTEGER(4) at (1)

但是这个很好:

program foo

integer :: nrev
double precision :: t_ref

t_ref = 1.

nrev = idint(t_ref)

end program foo

如我们所见:

$ gfortran -o foo foo.f90 -Wall -std=f95
$

关于Fortran:可能的值(value)变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10077361/

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