Module Fortran90:保存阿曲布他或存储在模块中?
我正在写一个程序,它将调用一个子程序几次。此子例程循环一系列项,每个项除以项数的阶乘(很像泰勒级数)。它的项数总是相同的,所以除法阶乘总是相同的。为了不计算每次调用中的阶乘,最好只定义一次向量,然后用相应的坐标除以(实际上是相乘;我将向量定义为Module Fortran90:保存阿曲布他或存储在模块中?,module,fortran,fortran90,subroutine,Module,Fortran,Fortran90,Subroutine,我正在写一个程序,它将调用一个子程序几次。此子例程循环一系列项,每个项除以项数的阶乘(很像泰勒级数)。它的项数总是相同的,所以除法阶乘总是相同的。为了不计算每次调用中的阶乘,最好只定义一次向量,然后用相应的坐标除以(实际上是相乘;我将向量定义为1/n!)。例如: S=(T0)+(T1/1)+(T2/2!)+(T3/3!)+...+(Tn/n!) (对于不同的阵列,T1,…,Tn,,这将计算几次) 最佳做法是:将其定义为具有save属性的变量,还是将其放入模块中并包含在子例程中?还是有更好的选择
1/n!
)。例如:
S=(T0)+(T1/1)+(T2/2!)+(T3/3!)+...+(Tn/n!)
(对于不同的阵列,T1,…,Tn,
,这将计算几次)
最佳做法是:将其定义为具有save属性的变量,还是将其放入模块中并包含在子例程中?还是有更好的选择?(为什么?)
从另一个问题(),我希望最好的办法是在子例程中使用SAVE(因为我可能不会在任何其他子例程中使用这个变量,所以无论如何我都必须使用SAVE),但我欢迎对此提供一些反馈
编辑:对不起,新添加的。假设最好的办法是使用SAVE;可以将其定义为可分配变量吗?我知道可分配变量和规则变量来自内存的不同部分;我不知道这如何与SAVE属性交互…(我将依赖程序在退出时自动释放变量) 两种选择几乎相同。初始化或最终确定变量时可能会出现差异 您可以使用使用模块的任何代码中的模块变量值初始化或执行其他操作。子例程的局部变量实际上是它的局部变量 我看不出有什么理由会选择其中一个,这取决于课程的整体结构。变量的确切用途和用法是什么 我更喜欢这个模块。对于大型可分配数组,您可以在需要时更轻松地释放内存,而无需使用特殊参数调用子例程。此外,您将有简单的子例程代码,而无需检查它是否是第一次调用 可分配变量可以
保存
,没有任何问题。但是没有理由认为本地save
变量通常是最好的