gpt4 book ai didi

c++ - 将 c for 循环转换为 fortran do 循环

转载 作者:行者123 更新时间:2023-11-27 23:51:12 29 4
gpt4 key购买 nike

我正在将一个 cpp prog(来自另一位作者)转换为 Fortran prog,我的 C 不是太强。我遇到了以

开头的 for 循环结构
for (int n = 1; 1; ++n) {
...

我本以为这会按照 Fortran Do 转换

Do n=1, 1, 2
...

...至少这是我基于我对++n 将做什么的理解的猜测。

我的翻译正确吗?如果是这样,循环最多循环一次,那么我错过了什么???

我知道在某些方面,c for 循环有一个“do-while”方面,因此移植到 Fortran Do 的问题。

无论如何......如果能得到澄清,我们将不胜感激。

编辑:经过一些迅速的回应,我想我明白了这是怎么回事

首先,精确的 C 代码复制/粘贴但“修剪”了一点,是

    for (int n = 1; 1; ++n) {
const double coef = exp(-a2*(n*n)) * expx2 / (a2*(n*n) + y*y);
prod2ax *= exp2ax;
prodm2ax *= expm2ax;
sum1 += coef;
sum2 += coef * prodm2ax;
sum4 += (coef * prodm2ax) * (a*n);
sum3 += coef * prod2ax;
sum5 += (coef * prod2ax) * (a*n);
// test convergence via sum5, since this sum has the slowest decay
if ((coef * prod2ax) * (a*n) < relerr * sum5) break;
}

是的,循环中有一个“中断”,在 Fortran 端被“退出”取代。

我认为关键似乎在于原始代码的作者创建了以下答案 对于 (int n=1; 1 ;++n )正是为了创建一个无限循环,我没想到这个 for 构造会创建一个无限循环。

无论如何,我当然可以在 Fortran 中创建一个带有“退出”的无限循环(尽管我希望我可以更明智地“做”它)

非常感谢大家。

似乎格雷戈里先生的回应是立即为我带来解决方案的那个,所以我会标记他的正确。对于 Fortran 方面,有许多替代方案,例如:

  Do While
:
If( something ) Exit
End Do

但是老式的我可能会使用带有“限制”的构造,例如

   Do i=1, MaxIter
:
If( something ) Exit
End Do

对于稍微复杂的应用程序,我可能会包含一个返回标志,以防它在 MaxIter 等中不收敛。

最佳答案

如果没有看到 C++ 程序如何跳出该循环,很难确定,但一个简单的 Fortran 等价物是

n = 1
do
! code, including an exit under some condition, presumably on the value of n
n = n+1
end do

如果循环在 n 达到临界值时终止,则等效项可能是

do n = 1, critical_value  ! no need to indicate step size if it is 1
! code
end do

关于c++ - 将 c for 循环转换为 fortran do 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46271220/

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