2016-11-23 74 views

回答

3

複雜* 16不是Fortran(90或更早版本或更高版本)。 如果您的數據類型很複雜(real64)(或非標準複雜* 16),標準通用exp()將選擇相應的精度和範圍。

2

其中每個部分(實數和虛數)都是64位?

如果你說COMPLEX(KIND = 8)(英特爾),你得到的每一個現實與想象64位。我需要看到什麼gfortran給...

可能最好的(我想大多數便攜式)使用ISO_C_BINDING,然後「看到自己」:

PROGRAM ABC 
USE ISO_C_BINDING 
IMPLICIT NONE 

COMPLEX(KIND=C_FLOAT_COMPLEX) :: A 
COMPLEX(C_DOUBLE_COMPLEX)  :: B 
COMPLEX(C_LONG_DOUBLE_COMPLEX) :: C 

WRITE(*,*) SIZEOF(A)=',SIZEOF(A) 
WRITE(*,*) SIZEOF(B)=',SIZEOF(B) 
WRITE(*,*) SIZEOF(C)=',SIZEOF(C) 

END PROGRAM ABC 
+0

如果想對於複雜的各部分的64位存儲,然後使用'iso_fortran_env,僅:real64;複雜(kind = real64)z;最終'可能是最好的選擇。但是這並沒有真正解決如何解釋這種價值的問題。 – francescalus

+0

我必須說我不知道​​。我只在Fortran中編寫了幾個月的代碼,並且從之前的代碼中學到了......所以基本上我將我的複雜變量聲明爲複雜的* 16,而沒有真正知道實際做了什麼。 – mwoua

+1

Complex * 16是ibm360 fortran66的延續。它意味着每個8字節的實數和虛數,所以它的工作原理與複數(real64)相同。對於所提及的編譯器,Real64的值爲8。 – tim18

2

由於Fortran 77的很少有直接使用DEXP()的理由,除非您將它作爲參數傳遞。

在正常表現(目前使用最普遍的,可能你的情況),只要用一般的EXP()所有冪。

如果你有一個罕見的情況,DEXP()作爲參數傳遞給函數,那麼no,沒有等價的,你必須編寫一個包裝函數調用通用的EXP()