gpt4 book ai didi

fortran - 每次使用包含模块时是否评估 Fortran 命名常量?

转载 作者:行者123 更新时间:2023-12-04 02:27:52 26 4
gpt4 key购买 nike

假设我定义了参数 pi = -acos(-1.0) 并将其保存在模块中。当我在另一个程序中使用这个模块时,pi 的值每次都是从函数 ACOS 计算出来的吗?

如果是这样,是否最好将 pi = -3.1415.... 定义为我需要的任何精度?

最佳答案

如果您在模块中定义了命名常量,那么它的值必须由常量表达式给出。在编译/执行模块中,通常会在编译模块本身时评估此常量表达式,而不是在最终引用它时。

无论哪种方式,使用模块的东西都不可能影响对该模块中命名常量值的评估。

对于问题的示例,ACOS(-1.0) 在编译时使用任何默认的真实类型进行评估。如果将其更改为类似

module pidef
use, intrinsic :: iso_fortran_env, only : piprec => real64
implicit none
real(piprec), parameter :: pi = ACOS(-1.0_piprec)
end module

然后常量表达式在 那个点 范围内使用 piprec 的值。作为常量表达式,每个值都必须在那时明确定义。不会是这样的

program piuse
use, intrinsic :: iso_fortran_env, only : piprec => real32
use pidef
implicit none
end program

将以某种方式使用 real32 评估 pi。同样,在编译模块后,也无法在模块的常量表达式中引用稍后全局定义的变量。

关于fortran - 每次使用包含模块时是否评估 Fortran 命名常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66170346/

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