【发布时间】:2014-06-17 17:11:36
【问题描述】:
我正在编写一个程序,它会多次调用一个子程序。这个子例程循环遍历项的总和,每个项除以项数的阶乘(很像泰勒级数)。它总是相同的项数,所以除法阶乘总是相同的。为了不在每次调用中计算阶乘,最好只定义一个向量,然后只除(实际上是相乘;我将向量定义为1/n!)除以相应的坐标。例如:
S=(T0)+(T1/1)+(T2/2!)+(T3/3!)+...+(Tn/n!)
(这将计算多次,针对不同的数组T1,...,Tn)
最佳实践是:将其定义为具有 save 属性的变量,还是将其放入模块中并将其包含在子例程中?还是有更好的选择? (为什么?)
从另一个问题 (fortran SAVE statement),我希望最好的办法是在子例程中使用 SAVE(因为我可能不会在任何其他子例程中使用此变量,我将不得不使用无论如何保存),但我欢迎对此提供一些反馈。
编辑:对不起,新增内容。假设最好的办法是使用 SAVE;可以将其定义为可分配变量吗?我知道可分配变量和常规变量来自内存的不同部分;我不知道这如何与 SAVE 属性交互......(我将依赖程序在退出时自动释放变量)。
【问题讨论】:
标签: module fortran fortran90 subroutine