gpt4 book ai didi

fortran - fortran 中 COMPLEX 的存储是否保证为两个 REAL?

转载 作者:行者123 更新时间:2023-12-01 07:36:41 31 4
gpt4 key购买 nike

许多 FFT 算法利用存储在数组中的实部和虚部交替的复数。通过创建一个 COMPLEX 数组并将其传递给 FFT 例程,是否可以保证它可以转换为具有交替实部和虚部分量的 REAL 数组(大小的两倍)?

    subroutine fft (data, n, isign)
dimension data(2*n)

do 1 i=1,2*n,2
data(i) = ..
data(i+1) = ..
1 continue
return
end

...
complex s(n)
call fft (s, n, 1)
...

(顺便说一句,维度数据(2 * n)是否与说它是真实的一样?)

最佳答案

我只是在写这个答案,因为经验告诉我,一旦我写出这样的答案,一位真正的 Fortran 专家就会过来纠正我。

我认为当前的标准及其任何前身都没有明确指出 complex将被实现为两个相邻的内存 reals .但是,我认为这种实现是标准定义 equivalence 的必然结果。和 common .我认为我从未遇到过其中 complex 的实现。没有实现为一对 reals .

该标准确实保证,尽管 complex可以转换成一对reals .所以,给出一些定义:

complex :: z
complex, dimension(4) :: zarr
real :: r1, r2
real, dimension(8) :: rarr

以下将执行您可能期望的操作
r1 = real(z)
r2 = aimag(z)

这两个功能都是基本的,这里有一个皱纹:
real(zarr)

返回一个 4 元素的实数数组,就像
aimag(zarr)

尽管
[real(zarr), aimag(zarr)]

是实数的 8 元素数组,实部为 zarr其次是复杂的部分。也许
rarr(1:8:2) = real(zarr)
rarr(2:8:2) = aimag(zarr)

对你没问题。不过,我不确定有什么更简洁的方法可以做到这一点。

亚历山大并不是唯一一个能够引用标准的人!他引用的那部分让我想知道非默认的复数标量。所以我继续阅读,我认为他为我们指出的部分的第 6 段是密切相关的

a nonpointer scalar object of any type not specified in items (1)-(5) occupies a single unspecified storage unit that is different for each case and each set of type parameter values, and that is different from the unspecified storage units of item (4),



我认为这对这里的任何答案都没有任何影响。

关于fortran - fortran 中 COMPLEX 的存储是否保证为两个 REAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31590004/

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