如果在现有代码中调用DCONJG(Z)
,其中Z被声明为COMPLEX*16
。添加DCONJG
标志后,CONJG
调用是否可以替换为-fdefault-real-8
?
如果Z
被定义为double complex
,这仍然适用吗?
在现有代码中double complex
和complex*16
都用于提高精度(并且应该是等效的)。应用-fdefault-real-8
标记后,double complex
是否映射到complex*32
?
答案 0 :(得分:1)
当-fdefault-real-8时,DCONJG呼叫是否可以用CONJG替换 标志被添加?
是的,标准conjg
将返回与其参数相同类型的值,而不管编译设置如何。内部函数的特定于类型的变体,例如dconjg
,通常被弃用,因为它们并不是无关紧要的。
如果Z被定义为双复数,这仍然适用吗?
是
并且是双复数,相当于应用了标志的复数 (双精度和真实相同)?
如果你的意思是那个编译标志也会影响复数值的实部和虚部的大小,那么是的,确实如此。
修改
我不知道gfortran
对于非标准(从不是,不是,也可能永远不会是)类型规范complex*32
的含义。但编译器的记录相当充分,所以自己有一个侦察员。就个人而言,我坚持使用指定复数类型的标准方法之一,在这种情况下,标准会向您保证指定的类型,例如: complex(real64)
,表示复数的每个组成部分的类型。