首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求复变量实部和虚部的泛型函数和特殊函数

求复变量实部和虚部的泛型函数和特殊函数
EN

Stack Overflow用户
提问于 2017-03-15 18:35:42
回答 1查看 6K关注 0票数 3

在Fortran中,我总是以双精度工作,所以我一直在使用特定的函数,比如dbledimag,来获得复杂变量的实部和虚部。但是,对于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),但有些网页说它们是供应商扩展(尽管许多编译器通常支持它们)。

我看过很多页,但资料相当混乱(即不太清楚甚麽是“标准”方式),所以我希望能就这类功能的选择提出意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-15 19:02:43

作为背景,我们所说的各种真实和复杂的变量意味着什么?当然,你知道真正的物体是什么意思。

一个复杂的物体由一个实部和一个虚部组成。如果一个复杂的对象有一个给定的类型,那么每个组件都是一个与复杂对象的类型相对应的实类。

这是一个很长的说法,如果

代码语言:javascript
复制
complex(kind=k) z

然后,KIND(z%re)KIND(z%im)都评估为k (为了清晰起见,使用Fortran 2008引入的复杂部件指示符)。

现在,real内部泛型接受一个复杂的表达式并返回它的真实组件。它这样做符合以下F2008规则(13.7.138),其中A是参数:

如果A是类型复杂且不存在的,则该类型参数就是A的类类型参数。

所以,是的:在当前的Fortran中,没有请求的类的real总是会给你一个真实的类型--复杂的真实组件。不管是双精度还是其他。

类似地,aimag返回一个实数(对应于虚部),即复数的实数。与real不同,aimag不接受控制结果类型的kind=参数。

对于Fortran 77来说,情况就不一样了:没有类似的概念,只有一个complex

dble是一个标准的内在特性。虽然这总是返回双精度,但它仍然是通用的,并将接受任何数字。dble(a)real(a,kind(0d0))是一样的,不管a的类型是什么。没有(标准的)具体规定。

drealdimagdconjg不是标准的本质。

我想,如果一个人非常关心的话,就可以为real创建特定的包装器。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42818050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档