在 fortran 中:使用 -fdefault-real-8 编译时 CONJG(Z) 是否等同于 DCONJG(Z)?

In fortran: Is CONJG(Z) equivialent to DCONJG(Z) when compiling with -fdefault-real-8?

如果在现有代码中有对 DCONJG(Z) 的调用,其中 Z 声明为 COMPLEX*16。添加-fdefault-real-8标志后,是否可以将DCONJG调用替换为CONJG

如果 Z 定义为 double complex 这仍然适用吗?

在现有代码中,double complexcomplex*16 都用于提高精度(并且应该是等价的)。应用 -fdefault-real-8 标志后,double complex 映射到 complex*32?

Can the DCONJG call be replaced with CONJG when the -fdefault-real-8 flag is added?

是的,标准 conjg 将 return 一个与其参数相同种类的值,而不管编译设置如何。内在函数的种类特定变体,例如 dconjg,通常被弃用正是因为它们不是种类无关的。

If Z is defined as double complex does this still apply?

是的。

And is double complex equivalent to complex with the flag applied (same for double precision and real)?

如果您的意思是编译标志是否也会影响复数值的实部和虚部的大小,那么是的,它会。

编辑

我不知道 gfortran 非标准(从来没有,现在不是,可能永远不会)的规范 complex*32 是什么意思。但是编译器的文档相当齐全,所以你自己去看看吧。就个人而言,我会坚持指定复数种类的标准方法之一,在这种情况下,标准向您保证指定的种类,例如complex(real64),表示复数各分量的种类。