获取复杂变量的实部和虚部的通用和特定函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取复杂变量的实部和虚部的通用和特定函数相关的知识,希望对你有一定的参考价值。
在Fortran中,我总是使用双精度,所以我一直在使用dble
和dimag
等特定函数来获取复杂变量的实部和虚部。然而,对于像sin
这样的其他函数,我不再使用dsin
,因为前者返回适当类型的值(即,sin
是通用函数)。对于复杂的变量似乎也是如此。所以我的问题是:
1)获得实部和虚部最常用的通用函数是什么?
- 似乎real(z)
,aimag(z)
和conjg(z)
总是返回一个合适的类型(通过gfortran实验),即,如果z
是双精度,那些函数返回双精度。这有保证吗?此外,行为是否依赖于编译器使用的标准? (即Fortran 77 vs 90或更高版本,特别是对于real(z)
?)
2)如果我(尽管如此)想要使用仅接收双精度参数且始终返回双精度值的特定函数,具体函数是什么?
- 到目前为止,我一直在使用dble(z)
和dreal(z)
,dimag(z)
,dconjg(z)
,但有些网页说它们是供应商扩展(尽管通常由许多编译器支持)。
我已阅读各种页面,但信息相当混乱(即,不太清楚“标准”方式是什么),所以我很感激任何关于这些功能选择的建议。
作为背景,我们的真实和复杂变量是什么意思?当然,你知道真实物体的含义。
复杂对象由实部和虚部组成。如果复杂对象具有给定种类,则每个组件是与复杂对象的种类相对应的实体。
如果,这是一个很长的路要走
complex(kind=k) z
然后KIND(z%re)
和KIND(z%im)
都评估为k
(使用Fortran 2008引入的复杂部分指示符来清晰)。
现在,real
内在泛型采用复杂表达式并返回其实际组件。它这样做符合以下F2008规则(13.7.138),其中A
是参数:
如果A的类型为complex且KIND不存在,则kind类型参数是A的类型参数。
所以,是的:在当前没有请求类型的Fortran real
中,总会给你一个真实的那种复杂的真实组件。无论是双精度还是其他精度。
类似地,aimag
返回复数的实数(对应于虚部)。与real
不同,aimag
不接受控制结果种类的kind=
论据。
Fortran 77的情况有所不同:没有类似的概念,只有一个complex
。
dble
是标准内在的。虽然这总是返回双精度,但它仍然是通用的,并且将接受任何数字。 dble(a)
与real(a,kind(0d0))
相同,无论a
的类型如何。没有(标准)具体。
dreal
,dimag
和dconjg
不是标准的内在函数。
我想如果一个人非常关心,可以围绕real
创建特定的包装器。
以上是关于获取复杂变量的实部和虚部的通用和特定函数的主要内容,如果未能解决你的问题,请参考以下文章
FFTW 和 OpenCV 的 C++ 接口,Mat 输出中的实部和虚部
python二级练习和考试复习(将复数2.3103-1.3410-3j赋值给变量A,并分别提取A的实部和虚部。)